我是一位有用的助手,可以为您翻译以下内容:
在每个文档中,都有一个名为“爱好”的子文档集合,代表了不同之间的关系,并且包含一个计数器,可以快速获取总数。
我曾经以为这种方法可以很好地扩展,因为不需要查询拥有数百万行的表格,而只需获取单个文档及其子数组。然而,当客户开始喜欢许多食物(反过来,当一种食物被许多客户所爱时),我遇到了一个问题。
以下是更新客户文档的查询语句,在这种情况下,客户已经喜欢其他7000种食物:
我正在尝试建模一个顾客“喜欢”食物的多对多关系。
我预计会得到大量(数百万)这些关系,因此我不希望它们都最终汇集到一个无法扩展的连接表中。
我创建了两个文档集合,
Customers
- name etc
- countOfLoves
- loves [ ... ]
并且
Foods
- name etc
- countOfLoves
- loves [ ... ]
在每个文档中,都有一个名为“爱好”的子文档集合,代表了不同之间的关系,并且包含一个计数器,可以快速获取总数。
我曾经以为这种方法可以很好地扩展,因为不需要查询拥有数百万行的表格,而只需获取单个文档及其子数组。然而,当客户开始喜欢许多食物(反过来,当一种食物被许多客户所爱时),我遇到了一个问题。
以下是更新客户文档的查询语句,在这种情况下,客户已经喜欢其他7000种食物:
query: { _id: "354286" }
update: { $push: { loves: { foodID: "354286", location: [ 55.752197, 37.6156 ] } }, $inc: { countOfLoves: 1 } }
nscanned:1 nupdated:1 keyUpdates:0 locks(micros) w:10135199 10137ms
实际上这里有两个问题:
a) 为什么需要10秒钟 - 是否有关于$push我不知道的东西
b) 是否有更好的Mongo模式可以建模这种关系?
(并且,我猜想 (c) - 我是否过度优化 - 应该只需创建一个loves连接表就可以了吗?)