如何避免嵌入文档不一致

时间:2017-10-16 00:41:40

标签: mongodb document-oriented-db

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

想象一下,我们有三个系列:用户,房间和预订。

inconsistent embed

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

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

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

一如既往地让我知道我是不是一个完全白痴。

1 个答案:

答案 0 :(得分:1)

Imho,你过度了。鉴于你的问题,用例是

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

我会选择以下型号的房间

{
  _id: 1001,
  beds: 2
}
用户

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

和预订

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

现在在预订概述中,您可以通过简单查询预订来获取所有相关信息(“谁”,“何时”和“哪个”),而无需任何开销来回答您使用案例中的第一个问题。在预订详细信息视图中,无可否认,您将不得不进行两次查询,但是通过正确的索引可以快速进行查询,并且根据您的技术,也可以异步完成。请注意,我使用房间号码作为id保存了索引。如何回答剩下的问题应该是显而易见的。

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