Mongodb 哪个是更好的MondoDB模式设计?

Mongodb 哪个是更好的MondoDB模式设计?,mongodb,database-design,nosql,Mongodb,Database Design,Nosql,一般来说,哪种模式更好?为什么?我一次又一次地遇到同样的问题,在网上,它似乎和哪一个更好混合在一起 第一个架构有一个位置ID的单个文档,其中包含一个嵌套菜单: { locationID: "xyz", menu: [{item: "a", price: 1.0}, {item: "b", price: 2.0}...] } 第二个模式对于给定的位置ID有多个文档 { locationID: "xyz&

一般来说,哪种模式更好?为什么?我一次又一次地遇到同样的问题,在网上,它似乎和哪一个更好混合在一起

第一个架构有一个位置ID的单个文档,其中包含一个嵌套菜单:

{
    locationID: "xyz",
    menu: [{item: "a", price: 1.0}, {item: "b", price: 2.0}...]
}
第二个模式对于给定的位置ID有多个文档

{
    locationID: "xyz",
    item: "a",
    price: 1.0
},
{
    locationID: "xyz",
    item: "b",
    price: 2.0
}
第一个模式看起来更快,并且不会复制位置ID,因此使用的内存稍微少一些。第二个模式似乎比较慢,因为它必须收集文档(也许它是按字母顺序索引的?),但是它更容易修改


关于这一点,是否有一个“明确”的答案或指南?

对于您上面显示的实际数据,我会选择第一种设计。第一种设计允许将单个位置的所有菜单项存储在单个Mongo文档中并从中检索。正如您所指出的,这可能比使用第二个更规范化的设计更快

<>当您可能使用第二个版本时,考虑菜单项元数据相对较大的情况。例如,假设您希望为每个菜单项存储一个10KB的图像。MongoDB限制单个BSON文档的最大大小为16MB。对于具有数百个菜单项的位置,您可能无法将所有菜单项及其元数据信息放在一个文档中。在这种情况下,第一个选项可能不适用,您将被迫使用第二个选项(或其他选项)