2012-03-15 32 views
2

因此,在關係數據庫中,我可能有兩個表,'User'和'Event',它們具有多對多的關係,因此連接表'UsersEvents'表示。現在我有一些數據要存儲在這張表上,而不是2個ID,就像一個名爲'Enjoyed'的布爾值。在Mongo中建立多對多連接的數據建模?

我明白,在Mongo中,您可以在表格之間創建嵌入鏈接,例如使用貓鼬

var Person = new Schema({ 
    email: String, 
    events: [EventFeedback] 
}) 

var Event = new Schema({ ... }); 

var EventFeedback = new Schema({ 
    person: Schema.ObjectId, 
    event: Schema.ObjectId, 
    enjoyed: Boolean 
}); 

但是,這真的是模型的最佳方式?我一直認爲EventFeedback中的所有內容都可以在Person.events中進行編輯,這會由Event._id進行索引?或者,這可能只是貓鼬的限制嗎?

+1

老實說,我只想去與關係數據庫,如果你發現你自己需要加入。 – YXD 2012-03-15 13:18:24

+0

其實,我想我需要的是[Embedded Documents](http://mongoosejs.com/docs/embedded-documents.html),它有點像模型,但主要用於定義Array內容的結構。我只關心我如何通過事件ID(或任何外部ID)查看這些嵌入式文檔之一...? – CpILL 2012-03-15 15:18:50

回答

1

您最好使用嵌入式文檔而不是鏈接。

var Person = { 
    email: "[email protected]", 
    events: [ 
     {code: "MONGONY2012", name: "Mongo NY", date: "5/23/2012", link: "http://www.10gen.com/events/mongo-nyc", enjoyed: true}, 
     {code: "MONGOPHL2012", name: "Mongo Philly", date: "4/9/2012", link: "http://www.10gen.com/events/mongodb-philly", enjoyed: true} 
    ] 
} 

您可以查詢蒙戈的事件很容易,使用點符號:

db.people.find({"events.code": "MONGONY2012"})

+0

我認爲這是一個問題。想必你會有很多活動和很多人。你打算爲每個人重複事件代碼嗎? – 2016-06-21 15:33:05

2

嘗試這種方式

var EventScheme = new Schema({ ... }); 
mongoose.model('Event', EventScheme); 

var PersonScheme = new Schema({ 
    email: String, 
    events: [{ 
    event: { 
     type: mongoose.Schema.ObjectId, 
     ref: 'Event' 
    }, 
    enjoyed: Boolean 
    }] 
});