0

我有一个集合,每个文档代表一个虚拟拍卖。我想找到给定时间段内最常见的项目 ID。在 SQL 中,我会SELECT item, COUNT(*) as count使用GROUP BY item通常的排序和限制。是否有与此等效的mongodb?

4

2 回答 2

2

MongoDB 在这里有几个选项。

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

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

于 2012-07-06T23:14:25.257 回答
0

或者您可以使用MapReduce然后对输出集合进行排序,或者您可以使用命令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)中,他们将发布一个新的聚合框架,这将使这些操作变得更加容易。

于 2012-07-06T23:19:05.440 回答