在Mongo中建立多对多连接的数据建模?

问题描述:

因此,在关系数据库中,我可能有两个表,'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

您最好使用嵌入式文档而不是链接。

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

尝试这种方式

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

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