【问题标题】:_id object id in subdocument VS new collection_id 子文档 VS 新集合中的对象 id
【发布时间】:2019-07-10 02:09:21
【问题描述】:

关键是,我正在开发一个 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"
    }

谢谢!

【问题讨论】:

    标签: node.js mongodb rest


    【解决方案1】:

    如果subdocuments 很小,则嵌入它。查询和更新会快得多。基于文档的数据库的一个主要部分是您确实希望将事物封装在尽可能少的文档中——这就是它们的设计用途。

    https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1 有一些关于你可以使用的经验法则的好建议。

    【讨论】:

    • 感谢您的回答和其他信息。我想如果子文档对于每个文档或所有文档的属性都有 thouns,那么将来会变成一个巨大的 json 文件(不是我的情况),但是如果子文档只有 50 个属性,那么这对我来说不是问题,不是吗?另外,根据您发布的信息链接,嵌入文档时有一句话“您无法将嵌入的详细信息作为独立实体访问”,然后我的反应是,我的情况不是一个好习惯..
    • 如果您需要像“查找所有具有 X 和 Y 的子文档”而不是“查找所有具有具有 X 和 Y 的子文档的 容器 文档”这样的查询,则嵌入模式确实有点崩溃,您必须开始使用聚合、应用程序端处理或以使这些查询成为可能的方式对数据进行非规范化。 (当他们说“无法访问......”时,这就是那篇文章所指的内容,他们的真正意思是“没有简单的方法来查询并且只返回匹配的子文档”)
    • 鉴于“所有子文档不与任何其他主文档共享”,嵌入通常是要走的路
    猜你喜欢
    • 2017-05-06
    • 2014-03-19
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2016-03-26
    • 2020-02-07
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多