在我的应用中,用户拥有事件和群组 - 事件可以(但不是必须)属于群组。我还是非关系数据库的新手,所以我想知道最佳实践的最佳实践。
var user = new mongoose.Schema({
name: { type: String },
events: [event],
groups: [group]
});
var group = new mongoose.Schema({
name: { type: String }
});
这是我很困惑的地方。
var event = new mongoose.Schema({
name: { type: String }
groups: ????
});
我是否只保留一个数组,其中包含对组ID的引用?
如果我这样做,我将如何按群组查找事件?
如果删除了一个组,我是否必须遍历每个事件以删除引用?
答案 0 :(得分:5)
在mongodb,你有两个选择。嵌入(子文档)与链接(另一个集合)
嵌入Vs链接 每种方法都有利弊。
<强>嵌入:强> 您将其嵌入文档中。
例如,您的文档可能看起来像
{
name : 'name',
events: [a,b,c],
groups: [1,2,3]
}
<强>链接强>
在这里,您可以使用一种外键进行链接。 Refer to docs
一个集合中的文档将引用另一个集合中的文档。 缺点是你失去原子操作。但是,您可以消除重复。
如果要更新组并更新事件,并且它们位于不同的集合中,则必须自己处理原子更新。 Mongodb不会为您保证。