在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进行索引?或者,这可能只是猫鼬的限制吗?
答
您最好使用嵌入式文档而不是链接。
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
}]
});
老实说,我只想去与关系数据库,如果你发现你自己需要加入。 – YXD 2012-03-15 13:18:24
其实,我想我需要的是[Embedded Documents](http://mongoosejs.com/docs/embedded-documents.html),它有点像模型,但主要用于定义Array内容的结构。我只关心我如何通过事件ID(或任何外部ID)查看这些嵌入式文档之一...? – CpILL 2012-03-15 15:18:50