子文档VS新集合中的_id对象ID

时间:2019-02-15 22:05:41

标签: node.js mongodb rest

重点是,我正在开发一个nodejs rest api,但我不确定在实体之间建立某种关系的最佳方法。我有一个主要实体,将保存大多数信息(简单的属性,如字符串,数字,日期...和子文档)。所有这些信息对于每个主文档都是唯一的,因此我的第一种方法是仅创建一个包含多个子文档或子文档数组的文档。但是我应该能够单独执行一些此子文档的发布/获取/放置/删除。因此,总而言之,我的问题是。 就性能而言,哪个更好地思考?

也许我可以举一个例子来更好地解释自己。始终考虑并考虑到所有子文档都不会与其他任何主文档共享。

一个收集示例:

  {
    "_id": ObjectId("xxxxxxxxxx"),
    "prop1": "some text",
    "number2": 1,
    subDocumentsArr: [
        { 
            "_id": ObjectId("xxxxxxxxxx"),
            "someSubDocumentProp": "Some text"
        },
        { 
            "_id": ObjectId("xxxxxxxxxx"),
            "someSubDocumentProp": "More text"
        }
    ]
}

VS

两个集合示例:

(first collection)

{
    "_id": ObjectId("xxxxxxxxxx"),
    "prop1": "some text",
    "number2": 1,
    subDocumentsArr: [ "subdoc1", "subdoc2" ]
}


(second collection)
    { 
        "_id": ObjectId("subdoc1"),
        "someSubDocumentProp": "Some text"
    }
    { 
        "_id": ObjectId("subdoc2"),
        "someSubDocumentProp": "More text"
    }

谢谢!

1 个答案:

答案 0 :(得分:1)

如果subdocuments小,则将其嵌入。查询和更新将更快。基于文档的数据库的主要部分是您确实希望将事物封装在尽可能少的文档中-这就是设计使用它们的方式。

https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1对于您可以使用的经验法则提供了一些很好的建议。