2012-11-27 62 views
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的引用?

如果我這樣做,我將如何按組查找事件?

如果一個組被刪除,我是否必須迭代每個事件以刪除引用?

回答

5

在mongodb中,您有兩種選擇。嵌入(subdocument)Vs鏈接(另一個集合)

嵌入Vs鏈接 每種方法都有優點和缺點。

嵌入: 將它嵌套在文檔中。

例如,您的文檔可能看起來像

{ 
    name : 'name', 
    events: [a,b,c], 
    groups: [1,2,3] 
} 
  • 你得到原子性,因爲只有一個集合參與。
  • 但是,值可能被複制

鏈接

在這裏,你有一種外鍵的鏈接。 Refer to docs

一個集合中的文檔將引用另一個集合中的文檔。 缺點是你失去原子操作。但是,您可以消除重複。

如果要更新組和更新事件,並且它們位於不同的集合中,則必須自己處理原子更新。 Mongodb不會爲你保證。