我阅读了很多有关在MongoDB中嵌入的内容,但是我仍然不知道何时使用它。我想到了一些方案:
我有一个名为UserGroups的集合,具有以下字段:
现在,我想向“用户”集合添加一个用户:
我应该在Users集合中有一个groupName字段,并在UserGroups集合得到更新时对其进行更新。
我应该在Users集合中添加groupId字段,并在需要UserGroups.name时执行连接。
我应该将用户文档作为嵌入式文档添加到UserGroups集合中。
或者我应该将userGroup文档作为嵌入式文档添加到Users集合中。但是,我认为我不应该这样做。
我应该使用哪个选项?
由于MongoDB模式的灵活性,开发人员不再需要先设计数据库模式(即Entity Relationship Diagram)。首先进行应用程序的设计,然后设计数据库模式以匹配应用程序的使用情况(查询,写入,更新等)。另请参阅数据建模。
这就是为什么数据库模式设计没有正确/错误答案的原因。MongoDB有多种用例,不同的应用程序可以利用不同的模型。
我们何时应该在MongoDB中使用嵌入式文档?
在不完全知道您的应用程序将如何与数据交互的情况下,以下答案仅是一般准则或方法:
赞成嵌入,除非有理由不这样做。
尝试denormaliseUserGroup
到User
第一。例如:
{ userid: 1001,
name: "Reza Tayebi",
group: {id: 10,
name: "Developer"
}
}
当关系是一对多时(不是很多,不是无限的)。
如果用户可以属于一个或几个组,则以上示例适用。如果有多个但限于5个以下,则可以引入一个数组。但是,如果一个用户可以有20个以上的组,或者可以有不限数量的组,则应该开始考虑将组分成另一个集合。
检索很可能同时发生。
的检索UserGroups
始终与用户相关联。例如Query some users with their respective groups
,或Query some users given a specific group(s)
。
何时可能同时发生更新。
如果有可能,你会更新Users
,并UserGroups
在同一时间。尽管从MongoDB 4.0开始,但如果并且未嵌入,您也可以使用多文档事务,但是单文档事务的性能更高。另请参见原子性和事务。Users
UserGroups
字段很少更新时。
如果在集合中很少更新组的名称。例如,如果经常Developers
需要Web Developers
将整个Users
集合的组名更新为该名称,则嵌入UserGroups
是不合适的。
同样,以上只是设计架构之前应考虑的一般准则,另请参阅以下资源:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句