2012-07-11 52 views
0

模型签:MongoDB的组由/不同的查询

checkin 
    _id 
    interest_id 
    author_id 

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

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

编辑我最终没有使用map/reduce,allthough Emily的答案很好地工作&很快。 我必须从过去的60分钟内只选择签入,并且不应该有太多结果。所以我只是把它们全部交给Ruby驱动程序,并且在ruby方面进行所有计算。速度稍慢,但更具可扩展性且易于理解。

最好, 罗马

回答

1

地图减少很可能会去这样做的方式,你可以得到理想的结果有两个地图降低。

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

  • 键将被AUTHOR_ID和interest_id
  • 值将被checkin_id

第二地图减少由给定AUTHOR_ID也只是签入的数量的计数。

  • 键将AUTHOR_ID
  • 值将checkin_id数
+0

谢谢你,但是,我想,你的,而不是给定的** ** interest_id意味着签到次数的计数AUTHOR_ID? – 2012-07-11 16:10:33

+0

是的,我很抱歉,我刚刚重读了你的问题,你会通过interest_id而不是author_id来计数。 – 2012-07-11 17:13:09