【问题标题】:How to avoid inconsistent embedded documents如何避免不一致的嵌入文档
【发布时间】:2018-03-27 10:54:03
【问题描述】:

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

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

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

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

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

像往常一样,如果我是个十足的白痴,请告诉我。

【问题讨论】:

    标签: mongodb document-oriented-db


    【解决方案1】:

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

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

    我会选择以下房间模型

    {
      _id: 1001,
      beds: 2
    }
    

    为用户

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

    预订

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2011-03-10
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多