Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongoDB分组依据/不同查询_Mongodb_Mapreduce_Mongoid - Fatal编程技术网

mongoDB分组依据/不同查询

mongoDB分组依据/不同查询,mongodb,mapreduce,mongoid,Mongodb,Mapreduce,Mongoid,型号签入: checkin _id interest_id author_id 我有一组签入(通过简单的“查找”查询解决) 我想数一数每种兴趣的签到次数。 是什么让任务变得有点困难?我们应该将一个人的两次签入和一个兴趣视为一次签入 另外,mongo中的组操作是通过map/reduce查询执行的。我们应该在这里用吗?我对这种方法的唯一想法是为每个兴趣聚合用户数组,然后返回该数组的长度 编辑尽管艾米丽的回答很好很快,但我最终还是没有使用map/reduce。 我必须只选择过去60分钟的

型号签入:

checkin
  _id
  interest_id
  author_id
我有一组签入(通过简单的“查找”查询解决) 我想数一数每种兴趣的签到次数。 是什么让任务变得有点困难?我们应该将一个人的两次签入和一个兴趣视为一次签入

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

编辑尽管艾米丽的回答很好很快,但我最终还是没有使用map/reduce。 我必须只选择过去60分钟的签入,并且不会有太多的结果。所以我把它们都放到Ruby驱动程序中,然后在Ruby端进行计算。它有点慢,但更具可扩展性,更易于理解

最好的,
Roman

地图缩小可能是实现这一点的方法,您可以使用两个地图缩小来获得所需的结果

首先,您可以删除重复的author\u id和interest\u id对

  • 关键是作者id和兴趣id
  • 值将是签入id
第二个map reduce只是一个给定author_id的签入数

  • 密钥将是author\u id
  • 值将是签入id计数

谢谢,但是,我想,你是说按给定的兴趣id而不是作者id计算签入次数?是的,对不起,我刚刚重读了你的问题,你会按兴趣id而不是作者id计算签入次数。