【发布时间】:2016-04-25 11:17:08
【问题描述】:
建模这种关系的最佳方式是什么?我有一个房间集合和一个用户集合。一个房间可以包含许多用户。一个用户可以属于多个房间。 我正在考虑将房间的用户插入房间集合中的数组(?)中。有没有更好的方法,或者按照我的方式来做这件事完全不正确?
【问题讨论】:
-
这是一个典型的例子,SQL 比 NoSQL 更好
标签: mongodb document-database database
建模这种关系的最佳方式是什么?我有一个房间集合和一个用户集合。一个房间可以包含许多用户。一个用户可以属于多个房间。 我正在考虑将房间的用户插入房间集合中的数组(?)中。有没有更好的方法,或者按照我的方式来做这件事完全不正确?
【问题讨论】:
标签: mongodb document-database database
你的方法是正确的。 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 ] }})
【讨论】: