mongoDB group by / distinct查询

时间:2012-07-11 13:58:33

标签: mongodb mapreduce mongoid

模型签入:

checkin
  _id
  interest_id
  author_id

我收集了签到(通过简单的“查找”查询解决) 我想计算每个兴趣的签到数量。 是什么让这项任务变得更加困难 - 我们应该将一个人和一个人的两张签到作为一个签到。

AFAIK,mongo中的组操作由map / reduce查询执行。我们应该在这里使用吗?我用这种方法得到的唯一想法是聚合每个兴趣的用户数组,然后返回这个数组的长度。

编辑我最终完全没有使用map / reduce,尽管Emily的回答很好,而且快。 我必须只选择最近60分钟的签到,结果不应该太多。所以我只是将它们全部转换为Ruby驱动程序,并在ruby端进行所有计算。它有点慢,但更具可扩展性和易于理解。

最好的, 罗马

1 个答案:

答案 0 :(得分:1)

地图缩小可能是这样做的方法,你可以通过两个地图缩小来获得所需的结果。

在第一个中,您可以删除重复的author_id和interest_id对。

  • 键将是author_id和interest_id
  • 值将为checkin_id

第二个map reduce只是给定author_id的checkins数量。

  • 键将是author_id
  • 值将是checkin_id count
相关问题