我们一直在努力重构我们的代码库并改进我们的API,在此事务中,出于多种原因,我们已从MySQL迁移到MongoDB。我正在努力把精力写在如何编写这个非常规查询上。
我们的查询需要考虑3个独立集合中的数据。这是唯一需要执行此操作的查询,因为我们已尝试使所有数据保持尽可能平坦。
这些集合是“用户”,“兴趣”和“匹配项”。
下面您将看到将影响查询的所有用户属性。
gender
age
latitude
longitude
preferences: {
matchmaking: {
orientation
distance
ageMinimum
ageMaximum
visbile
}
}
取向值是“同性恋”,“异性恋”和“双性恋”之一。我们需要使用“首选项/匹配项”部分中的数据,以找到匹配这些首选项的其他用户。例如,查找30英里内的所有“男性”用户。
这是简单的部分,现在我们还有matches
集合,我们无法向任何用户显示他们之间存在匹配项。为了找到两个用户之间的匹配项,您只需对
users: { $all: [myId, <otherid>] }
任何返回结果的ID都不能包含在结果集中。
此后,我们有了interests
集合,以查询您感兴趣的内容。
{ user: myId, interestedIn: <otherid> }
任何在此处返回结果的ID也不能包含在结果集中。
我很难弄清楚如何在MongoDB中做到这一点,而且似乎没有什么内容。
编辑:我并不是要问任何人写整个查询,但是如何减少多个集合的示例将大有帮助。