MongoDB地理搜索两个集合

时间:2012-08-09 16:41:16

标签: node.js mongodb mongoose

我正试图找出一种地理查询两个集合的方法:

  1. Person {name, age, groupid}
  2. Groups (id, name, geoLocation[x,y])
  3. 我需要找到所有与age > 18

    人员相近的群组

    知道怎么做而不必为每个找到的人查询群组吗?

1 个答案:

答案 0 :(得分:1)

您在MongoDB中没有联接,所以您需要找到另一种解决方法。

我想到的下一个可行的方法是用组记录存储一系列年龄范围:

{
    _id: {},
    name: {},
    geoLocation: {},
    age_groups: {
        'gt18': 1
    },
}

然后我会查询age_groups.gt18字段并提取所有记录。当然,这意味着你需要一些东西来保持这个领域的最新状态。有几种方法:

  • MR(Map Reduce)这实际上需要先输出到汇总表,所以我不建议这样做。
  • 基于事件的预聚合。当用户加入或离开组时,您将获得其年龄并按比例更新聚合字段。

我个人会选择预先汇总的事件处理方法