在我的应用中,用户具有事件和组-事件可以(但不必)属于组。我仍然对非关系型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/

10-16 09:47