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",因此会对存储产生影响,但几乎可以忽略不计。但这是更好选择的代价。
我需要存储用户拥有的物品。
我目前使用的结构如下:
...
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",因此会对存储产生影响,但几乎可以忽略不计。但这是更好选择的代价。