2012-07-06 130 views
0

我有一个代表虚拟拍卖的每个文件的集合。我想查找给定时间段内最常用的物品ID。在SQL中,我想SELECT item, COUNT(*) as countGROUP BY item和通常的排序和限制。有没有与此相当的mongodb?mongodb:字段按发生次数排序

回答

2

MongoDB在这里有几个选项。

这些选项中的每一个都有不同的语法和不同的速度。

在这些情况下,您可能会发现这些选项相对较慢。 Map/Reduce作业旨在“离线”运行,通常作为“cron作业”或“计划任务”。请注意,如果您计划执行此操作,您可能需要预先汇总此数据。

+0

我现在有一个每小时运行一次到一个单独表格的Map/Reduce操作。 – 2012-07-06 23:56:09

0

或者您可以使用MapReduce,然后对输出集合进行排序,或者您可以使用命令group,但是您需要在客户端执行大部分排序和限制。

举例group命令:

db.coll.group(
     {key: { a:true, b:true }, 
     cond: { active:1 }, 
     reduce: function(obj,prev) { prev.csum += obj.c; }, 
     initial: { csum: 0 } 
     }); 

另外值得一提的是在MongoDB中(2.2)的下一个稳定版本,他们将发布一个新aggregation framework,这将使得该操作更容易。