【问题标题】: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 保存了一个索引。如何回答剩下的问题应该很明显了。
所以根据你原来的问题:这里不需要嵌入,恕我直言。