如何避免不一致的嵌入文档
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 保存了一个索引。如何回答剩下的问题应该是显而易见的。
所以根据你原来的问题:恕我直言,这里不需要嵌入。
在理解何时以及为何在 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 保存了一个索引。如何回答剩下的问题应该是显而易见的。
所以根据你原来的问题:恕我直言,这里不需要嵌入。