2012-08-09 51 views
0

我试图找出一种方法来查询地理两个集合:MongoDB的地理搜索上两个集合

  1. Person {name, age, groupid}
  2. Groups (id, name, geoLocation[x,y])

我需要找到所有的人组附近与age > 18

任何想法如何做到这一点,而无需查询每个找到的人的组?

回答

1

您在MongoDB中没有连接,因此您需要找到另一种解决方法。

我想下一次plausable方法是存储时代的阵列组记录范围:

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

然后,我只想查询上age_groups.gt18场并拔出所有记录。当然,这意味着你需要一些东西来保持这个领域的最新进展。有几种方法:

  • MR(Map Reduce)这实际上需要输出到汇总表中,因此我不推荐这么做。
  • 基于事件的预聚合。当一个用户加入或离开一个组时,你会获得他们的年龄,并且顺应地更新聚合字段。

我会亲自去参加基于事件的预处理方法