【问题标题】:What's the best way to store data in MongoDB?在 MongoDB 中存储数据的最佳方式是什么?
【发布时间】: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": "...",
    }

考虑到可能有数以百万计的事件和数以千万计的出版物,根据这些标准,最好的选择是什么:

-查询速度

-成本

-动态(添加一个出版物,修改它,删除它,...)

-也许是其他人?

提前谢谢你!

【问题讨论】:

  • 动态字段名称(例如123)通常是一个糟糕的设计。所以,使用数组。如果您确实有数千万的出版物,请注意,最大文档大小为 16 MiByte。在这种情况下,它不起作用,您必须采用完全不同的方法。
  • 为什么我的原始解决方案结合了两个集合不好?对于出版物限制,这种方法是一个好方法吗? stackoverflow.com/a/40178043/11097514
  • 实际上我的第一个解决方案可能是一个不错的选择,因为将数据分成两个集合可以减少文档超过 16 MB 限制的可能性,对吧?

标签: node.js arrays mongodb data-structures


【解决方案1】:

您应该为此使用array。就像您说的那样,这可能是一个非常庞大的数据,dynamically allocating memory 在这种情况下,请让您的程序正常工作slower

【讨论】:

  • 但是为什么我的第一种方法结合两个集合是错误的?
猜你喜欢
  • 1970-01-01
  • 2020-07-09
  • 2013-07-22
  • 2011-08-09
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
相关资源
最近更新 更多