gpt4 book ai didi

mongodb - 我们什么时候应该在 MongoDB 中使用嵌入式文档?

转载 作者:可可西里 更新时间:2023-11-01 09:28:44 25 4
gpt4 key购买 nike

我阅读了很多关于在 MongoDB 中嵌入的内容,但我仍然不知道何时使用它。我想到了一些场景:

我有一个名为 UserGroups 的集合,其中包含以下字段:

  • _id
  • 姓名

现在我想添加一个用户到用户集合:

  1. 我应该在 Users 集合中有一个 groupName 字段,并在 UserGroups 集合获得更新时更新它。

  2. 我应该在 Users 集合中添加 groupId 字段,并在需要 UserGroups.name 时执行联接。

  3. 我应该将用户文档作为嵌入文档添加到 UserGroups 集合。

  4. 或者我应该将 userGroup 文档作为嵌入文档添加到 Users 集合中。不过,我认为我不应该这样做。

我应该使用哪个选项?

最佳答案

由于 MongoDB 架构的灵 active ,开发人员不再需要首先设计数据库架构,即 Entity Relationship Diagram .首先是应用程序的设计,然后是设计数据库模式以匹配应用程序的使用(查询、写入、更新等)。另见 Data Modelling .

这就是数据库模式设计没有正确/错误答案的原因。 MongoDB 有多种用例,不同的应用程序可以利用不同的模型。

When should we use embedded documents in MongoDB?

在不清楚您的应用程序将如何与数据交互的情况下,以下答案只是一个一般准则或方法:

支持嵌入,除非有理由不这样做。

首先尝试将 UserGroup 反规范化为 User。例如:

{ userid: 1001,
name: "Reza Tayebi",
group: {id: 10,
name: "Developer"
}
}

当关系是一对多时(不多,不无限)。

如果用户可以在一个或几个组中,则上面的示例是适用的。如果不止一个,但限于5个以下,可以引入数组。但是,如果用户可以在 20 多个或无限数量的组中,您应该开始考虑将组分成另一个集合。

何时检索很可能同时发生。

如果 UserGroups 的检索始终与用户关联。例如,查询一些用户及其各自的组,或者查询一些给定特定组的用户

何时可能同时发生更新。

如果您可能会同时更新 UsersUserGroups。虽然从 MongoDB 4.0 开始,您可以使用 multi-documents transactions如果未嵌入 UsersUserGroups,则单个文档事务的性能会更高。另见 Atomicity and Transactions .

当字段很少更新时。

如果一个组名在集合中很少更新。例如,如果对于整个 Users 集合,组名 Developers 需要更新为 Web Developers,那么嵌入 UserGroups 不合适。

同样,以上只是您在设计架构之前应考虑的一般准则,另请参阅以下资源:

更新:

新资源:Building with Patterns: A Summary .另外值得一提的是,对于需要对多个文档(在单个或多个集合中)进行读写原子性的情况,MongoDB 支持 multi-document Transactions .

关于mongodb - 我们什么时候应该在 MongoDB 中使用嵌入式文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com