在我的应用程序中,用户有事件和组 - 并且事件可以(但不需要)属于组。我对非关系数据库还是新手,所以我想了解优化构建此数据库的最佳实践。
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/