如何避免不一致的嵌入文档

How to avoid inconsistent embedded documents

在理解何时以及为何在 mongo 数据库中使用嵌入式文档时遇到一些麻烦。

假设我们有三个集合:用户、房间和预订。

对于这样的情况,我有几个问题:

1) 您将如何更新嵌入文档?应用程序开发人员是否有责任将 kevin 的所有实例查找为嵌入式文档并进行更新?

2) 如果解决方案是使用文档引用,那是否与关系数据库连接一样重?这只是示例不适合 Mongo 的一个例子吗?

一如既往地让我知道我是否是个彻头彻尾的白痴。

恕我直言,你做得太过了。鉴于您提出的问题用例是

  • 对于给定的预订,哪个用户预订了哪个房间?
  • 对于给定的用户,他或她的详细信息是什么?
  • 给定的房间提供多少张床?

我会选择以下型号的房间

{
  _id: 1001,
  beds: 2
}

对于用户

{
   _id: new ObjectId(),
   username: "Kevin",
   mobile:"12345678"
 }

和预订

{
   _id: new ObjectId(),
   date: new ISODate(),
   user: "Kevin",
   room: 1001
}

现在在预订概览中,您只需查询预订即可获得所有相关信息("who"、"when" 和 "which"),而无需任何开销来回答第一个问题你用案例。在预订详细信息视图中,诚然,您必须执行两个查询,但通过适当的索引,它们的速度快如闪电,而且根据您的技术,也可以异步完成。请注意,我使用房间号作为 id 保存了一个索引。如何回答剩下的问题应该是显而易见的。

所以根据你原来的问题:恕我直言,这里不需要嵌入。