Python Mongoengine数据库关系和连接字段

Python Mongoengine数据库关系和连接字段,python,database,mongodb,nosql,mongoengine,Python,Database,Mongodb,Nosql,Mongoengine,您好,我正在尝试与mongoengine建立一个工人项目关系,将有各种项目和工人。 捐款将是该计划的主要投入。我需要这些数据库用于将来的功能。 我希望在数据库之间建立一些关系,而不是根据输入更新所有内容。比如, [1] 工人的总工作时间 [2] 工人在该项目上工作的总小时数 [3] 项目的连续百分比计算,百分比参考取决于指定的工时 [4] 到目前为止,项目成本取决于工人的每小时工资和工作时间 我是noSQL数据库的新手,我不知道我写的东西是否正确。是否可以使用一些映射函数在数据库之间建立这些关系

您好,我正在尝试与mongoengine建立一个工人项目关系,将有各种项目和工人。 捐款将是该计划的主要投入。我需要这些数据库用于将来的功能。 我希望在数据库之间建立一些关系,而不是根据输入更新所有内容。比如,

[1] 工人的总工作时间

[2] 工人在该项目上工作的总小时数

[3] 项目的连续百分比计算,百分比参考取决于指定的工时

[4] 到目前为止,项目成本取决于工人的每小时工资和工作时间

我是noSQL数据库的新手,我不知道我写的东西是否正确。是否可以使用一些映射函数在数据库之间建立这些关系?我不知道我应该用什么来处理这些问题,或者是否需要对代码进行任何更改才能正常工作。 你能给我写一些例子或建议一些研究这些东西的来源吗。在过去的两个小时里,我一直沉浸在mongoengine文档中,但无法满足我的需求


提前感谢您的帮助。

您不会使用单独的数据库……您将位于一个数据库中,并且可能有不同的集合。但基于您的4个关键输出要求,我建议您只需使用一个集合将其保持平坦-并将您的应用程序设计为放入满足您的4个输出要求的字段/数据…这就是NoSQL的优势-不要将内容拆分,然后将其合并-而是将所有数据放在一起

您通常不想输入聚合总和,因为计算最好在输出上完成,所以只需计算输入…只需以字段/格式输入粒度数据,这将使聚合查询易于运行

import mongoengine

def global_init():
    mongoengine.register_connection(alias="core", name="project")

class Worker(mongoengine.Document):
    username = mongoengine.StringField()
    salary_per_hour = mongoengine.FloatField()

    total_hours_worked = ********[1]

    meta = {
        "db_alias": "core",
        "collection": "users"
    }

class Project(mongoengine.Document):
    name = mongoengine.StringField()
    associated_users = mongoengine.ListField(ReferenceField(User))
    progress = mongoengine.EmbeddedDocumentField(Progress)

    meta = {
        "db_alias": "core",
        "collection": "projects"
    }

class Contrib(mongoengine.Document):
    project = mongoengine.ReferenceField(Project)
    user = mongoengine.ReferenceField(User)
    hour = mongoengine.FloatField()

    meta = {
        "db_alias": "core",
        "collection": "contribs"
    }

class Progress(mongoengine.EmbeddedDocument):
    total_hours = ********[2]
        percentage = ********[3]
    total_cost = ********[4]