用户/房间关系的MongoDB标准

时间:2018-02-09 20:49:06

标签: node.js mongodb mean-stack

所以我有这个MEAN项目,业余爱好。 现在我正在设置用户和房间,并且对进一步的进展有点犹豫,因为我不确定db的正确协议。

我记得,你不应该有多对多的关系;相反,你应该有一个关系表。

现在,我的用户架构有一个他所在的房间数组,我的房间架构有一组与之绑定的用户(第三个和最后一个架构是消息)。

拥有一个包含PK的userroomrelation文档,一个房间的id,然后是这个房间里所有用户的列表,会不会更好?

谢谢, 拉斯穆斯

2 个答案:

答案 0 :(得分:0)

MongoDB不是像* SQL数据库这样的关系数据库(因此MongoDB被称为NoSQL),因此在Mongo中使用关系表效率相当低。如果您不想重复数据,那么在房间收藏中持有一系列用户_id就像您可以获得的那样理想。

Here are some more indepth answers on many-to-many in MongoDB.

答案 1 :(得分:0)

用户如何在多个房间内?这不仅仅是用户的财产吗?如果您索引为什么还需要将它存储在房间?

没有一种正确的方法,它实际上取决于你拥有的每个对象的数量,如果它是一个很小的数字(如房间和用户所暗示的那样),你可能会更好,更简单,更健壮(不能存储不可能的值)就像在用户RoomId上拥有一个属性一样。这永远不会是不一致的,如果你需要在给定的房间里找到一组用户,这是一个便宜的查询。

在MongoDB中,您可以对数据进行非规范化并在包含部分或全部其他对象的每个对象上存储数组,但如果您愿意,也可以创建有效的连接集合。

例如,您可以使用具有适当索引的集合{UserId,RoomId,DateTimeEntered,DateTimeLeft},以便您在给定时间快速查找给定房间中的所有用户。一旦你有了这组ID,你可以加载它们,如果你需要它们进行显示,或者你可以将显示所需的字段添加到这个表{UserId,UserName,...}但是你有问题需要维护这些数据如果你需要知道当他们进入房间的时候它会改变或保持完好无损。

StackOverflow上还有一些关于你应该如何存储相关数据的其他问题,我建议你也去看看。

相关问题