1

在我的应用程序中,用户有事件和组 - 事件可以(但不需要)属于组。我对非关系数据库还是新手,所以我想知道最佳实践来优化结构。

    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 的数组?

如果我这样做,我将如何按组查找事件?

如果删除了一个组,我是否必须遍历每个事件才能删除引用?

4

1 回答 1

5

在 mongodb 中,您有两种选择。嵌入(子文档)与链接(另一个集合)

嵌入与链接 每种方法各有利弊。

嵌入: 您将其嵌套在文档中。

例如,您的文档可能看起来像

{
    name : 'name',
    events: [a,b,c],
    groups: [1,2,3]
}
  • 你会得到原子性,因为只涉及一个集合。
  • 但是,值可能会重复

链接

在这里,您使用一种外键链接。参考文档

一个集合中的文档将引用另一个集合中的文档。缺点是你失去了原子操作。但是,您消除了重复。

如果要更新组和更新事件,并且它们位于不同的集合中,则必须自己处理原子更新。Mongodb 不会为您保证。

于 2012-11-27T23:33:07.407 回答