mongodb 中的多对多数据建模
Many to Many Data modelling in mongodb
建立这种关系的最佳方式是什么?我有一个房间集合和一个用户集合。一个房间可以包含很多用户。一个用户可以属于多个房间。
我正在考虑将房间的用户插入房间集合中的数组(?)中。有没有更好的方法,或者完全按照我的方式去做是不正确的?
你的做法是正确的。 MongoDB 不需要模式,因此您可以将对另一个集合中的项目的引用存储在一个集合的项目中。
您可以将 room
集合中的 ObjectId 数组存储在 user
集合中,以识别某个人加入了哪些房间。同样,您可以将 user
集合中的 ObjectId 数组存储在 room
集合中,以识别哪些用户加入了房间。
您的架构看起来类似于这些:
var UserSchema = new Schema({
'name': String,
rooms: [{ type: Schema.Types.ObjectId, ref: 'RoomSchema' }]
});
var RoomSchema = new Schema({
'name': String,
'users': [{ type: Schema.Types.ObjectId, ref: 'UserSchema' }]
});
它可能看起来像:
{_id:"123", "type":"room", "users":[ 111, 222]}
{_id:"111", "type":"user", "room": [ 123, 456]}
在房间中添加用户示例:
db.test.update( { _id: "123" }, { $addToSet: {"users": 333 } } )
从房间中删除用户的示例:
db.test.update( { _id: "123" }, { $pullAll: { scores: [ 111, 222 ] }})
建立这种关系的最佳方式是什么?我有一个房间集合和一个用户集合。一个房间可以包含很多用户。一个用户可以属于多个房间。 我正在考虑将房间的用户插入房间集合中的数组(?)中。有没有更好的方法,或者完全按照我的方式去做是不正确的?
你的做法是正确的。 MongoDB 不需要模式,因此您可以将对另一个集合中的项目的引用存储在一个集合的项目中。
您可以将 room
集合中的 ObjectId 数组存储在 user
集合中,以识别某个人加入了哪些房间。同样,您可以将 user
集合中的 ObjectId 数组存储在 room
集合中,以识别哪些用户加入了房间。
您的架构看起来类似于这些:
var UserSchema = new Schema({
'name': String,
rooms: [{ type: Schema.Types.ObjectId, ref: 'RoomSchema' }]
});
var RoomSchema = new Schema({
'name': String,
'users': [{ type: Schema.Types.ObjectId, ref: 'UserSchema' }]
});
它可能看起来像:
{_id:"123", "type":"room", "users":[ 111, 222]}
{_id:"111", "type":"user", "room": [ 123, 456]}
在房间中添加用户示例:
db.test.update( { _id: "123" }, { $addToSet: {"users": 333 } } )
从房间中删除用户的示例:
db.test.update( { _id: "123" }, { $pullAll: { scores: [ 111, 222 ] }})