node.js - _id 子文档 VS 新集合中的对象 id
问题描述
关键是,我正在开发一个 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"
}
谢谢!
解决方案
如果subdocuments
很小,嵌入它。查询和更新会快得多。基于文档的数据库的一个主要部分是您确实希望将事物封装在尽可能少的文档中——这就是它们的设计用途。
https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1对您可以使用的经验法则有一些很好的建议。
推荐阅读
- c# - 索引(ElasticClient.IndexMany())抛出 StackOverflowException
- python - 在 ManyToManyField 中计算喜欢 - django rest 框架
- postgis - 通过外部 Geoserver 连接到本地 PC 中的 postgis 数据库
- android - 为什么更新不存在的 firestore 文档永远不会失败?
- php - 为什么流明不能识别正在发送的字段
- php - 如果列不为空,则更新记录,否则在 laravel 中创建新记录
- swift - SwiftUI MacOS - 设置 NSToolbar 颜色
- android - 如何传递继承Kotlin中另一个类的不同类的可变参数?
- java - 如何使用 OpenCV 检测停车标志?
- javascript - 在 Angular 项目中导入 2 个同名的 JavaScript 函数