【发布时间】:2021-10-22 07:26:01
【问题描述】:
我想知道我在 MongoDB 中的数据结构的最佳替代方案是什么。
我有这个收藏:
事件集合
{
"_id": {
"$oid": "611ffe86c7db41a72d3b8635"
},
"title": "...",
"description": "...",
"creatorID": "...",
"imageUrl": "..."
}
还有,
评论收集:
{
"_id": {
"$oid": "some ID"
},
"eventID": "611ffe86c7db41a72d3b8635",
"text": "..."
}
在每个事件中,可以有多个出版物。我确实创建了两个集合,因此我可以从一个事件 ID 调用 Thing.find({ eventID: 'a event ID' }) 并从一个事件中获取所有出版物。
它工作正常,但我看到在一个字段中可以为一个父级存储数组或多个子级。我想知道是否最好使用这两个结构之一(只有一个集合):
结构 1:
{
"_id": {
"$oid": "611ffe86c7db41a72d3b8635"
},
"title": "...",
"publications" : [ "PUBLICATION 1" , "PUBLICATION 2", ... ]
"description": "...",
"creatorID": "...",
"imageUrl": "...",
}
结构 2:
"_id": {
"$oid": "611ffe86c7db41a72d3b8635"
},
"title": "...",
"publications" : {
"1" : "Publication 1",
"2" : "Publication 2",
"3" : "Publication 3",
...
}
"description": "...",
"creatorID": "...",
"imageUrl": "...",
}
考虑到可能有数以百万计的事件和数以千万计的出版物,根据这些标准,最好的选择是什么:
-查询速度
-成本
-动态(添加一个出版物,修改它,删除它,...)
-也许是其他人?
提前谢谢你!
【问题讨论】:
-
动态字段名称(例如
1、2、3)通常是一个糟糕的设计。所以,使用数组。如果您确实有数千万的出版物,请注意,最大文档大小为 16 MiByte。在这种情况下,它不起作用,您必须采用完全不同的方法。 -
为什么我的原始解决方案结合了两个集合不好?对于出版物限制,这种方法是一个好方法吗? stackoverflow.com/a/40178043/11097514
-
实际上我的第一个解决方案可能是一个不错的选择,因为将数据分成两个集合可以减少文档超过 16 MB 限制的可能性,对吧?
标签: node.js arrays mongodb data-structures