在我的应用中,用户具有事件和组-事件可以(但不必)属于组。我仍然对非关系型DB还是陌生的,所以我想知道最佳实践,以最佳地构造这种关系。
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的数组?
如果这样做,我如何按组查找事件?
如果删除了一个组,是否需要遍历每个事件以删除引用?
最佳答案
在mongodb中,您有两种选择。嵌入(子文档)与链接(另一个集合)
嵌入与链接
每种方法都各有利弊。
嵌入:
您将其嵌套在文档中。
例如,您的文档可能看起来像
{
name : 'name',
events: [a,b,c],
groups: [1,2,3]
}
您将获得原子性,因为仅涉及一个集合。
但是,值可能重复
连结中
在这里,您链接有一种外键。 Refer to docs
一个集合中的文档将引用另一个集合中的文档。缺点是您失去原子操作。但是,您消除了重复。
如果要更新组并更新事件,并且它们在单独的集合中,则必须自己处理原子更新。 Mongodb不会为您保证。
关于node.js - 如何在 Mongoose 中建立多对多关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13592801/