MongoDb结构推荐

MongoDb Structure Recommendation

我需要存储用户拥有的物品。

我目前使用的结构如下:

...
inventory:{
    itemId1:2,
    myOtherItem:120,
    something:1
},
...

我正在考虑改用如下结构:

...
inventory:[
    {id:"itemId1",amount:2},
    {id:"myOtherItem",amount:120},
    {id:"something",amount:1}
],
...

第二种方式是推荐的数据存储方式吗?如果是这样,与第一种方式相比有什么优势吗?

内存存储空间有限。使用第二种方式会占用更多存储空间吗? MongoDb 是否为数组中的每个元素存储 "id" 和 "amount"?

是的,是的和是的是简短的回答。是的,改变它。原因有很多。

第一点总库存:

db.collection.aggregate([
    { "$unwind": "$inventory" },
    { "$group": {
       "_id": "$inventory.id",
       "amount": { "$sum": "$amount" }
    }}
])

或者跨文档。使用现有结构很痛苦,因为任何服务器处理都需要 JavaScript 执行效率不高。

其次,找到一个文档,其中您的 "inventory" 项的数量超过 10。痛苦的 JavaScript 处理没有索引,或者在第二种形式中很简单:

db.collection.find({ "inventory.amount": { "$gt": 10 } })

它会占用更多 space 吗,是的,它会占用 "little" 更多 space 来存储,但好处超过了这个。真的没什么好担心的。

这是一种更好、更一致的方式来存储事物并一致地映射到代码中的任何对象,而不依赖于特定字段的 "hash/map" 键存储。

因此,由于它 "plays nice" 具有各种 MongoDB 方法,并允许对事物进行索引,所以是的,建议这样做。是的,有上面提到的优点。是的,俗话说 "Nothing is free",因此会对存储产生影响,但几乎可以忽略不计。但这是更好选择的代价。