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

时间:2012-03-15 13:15:23

标签: mongodb database-design mongoose database

所以在关系数据库中我可能有2个表,'User'和'Event',它们具有多对多的关系,因此连接表'UsersEvents'说。现在我有一些数据要存储在这个表上,而不是2个ID,就像一个名为'Enjoyed'的布尔值。

据我所知,在Mongo中,您可以在表格之间创建嵌入式链接,例如使用Mongoose

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索引?或许这只是Mongoose的限制?

2 个答案:

答案 0 :(得分: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
  }]
});

答案 1 :(得分:1)

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

var Person = { 
   email: "joe.user@users.mongodb.org",
   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}
   ]
}

您可以使用点表示法轻松查询Mongo事件:

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