我有一个包含Parent
的{{1}}个集合,每个EmbeddedThing
都包含对创建它的EmbeddedThing
的引用。
User
我很快意识到我需要获得给定用户的所有UserCollection: [
{
_id: ObjectId(…),
name: '…'
},
…
]
ParentCollection: [
{
_id: ObjectId(…),
EmbeddedThings: [
{
_id: 1,
userId: ObjectId(…)
},
{
_id: 2,
userId: ObjectId(…)
}
]
},
…
]
,我设法使用map / reduce完成:
EmbeddedThing
这是我应该将"results": [
{
"_id": 1,
"value": [ `EmbeddedThing`, `EmbeddedThing`, … ]
},
{
"_id": 2,
"value": [ `EmbeddedThing`, `EmbeddedThing`, … ]
},
…
]
标准化为自己的集合,还是应该保持map / reduce来实现这一目标?还有其他一些设计吗?
如果有帮助,这是为了让用户在所有EmbeddedThing
中看到EmbeddedThing
的列表,而不是某些报告/聚合任务(这让我意识到我可能会这样做)错)。
谢谢!
答案 0 :(得分:2)
“嵌入或不嵌入:这是问题”:)
我的规则是:
OrderItem
的{{1}}没有意义。您应该查看您的访问模式。如果您每秒加载Order
几千次,并且每周加载一次ParentThing
,那么map-reduce可能是一个不错的选择。用户查询速度很慢,但您的应用程序可能没问题。
另一种方法是更正规化。也就是说,当您添加嵌入的东西时,将其添加到父项和用户。