mongodb集合中的前n个元素

时间:2012-08-01 18:02:12

标签: ruby-on-rails ruby mongodb

我有一个像这样委托的mongo db集合

{
      _id:
      sender:
      receiver:
}

是否有使用/不使用mapreduce在集合中的发送者和接收者中获得前N个?我正在使用mongodb ruby​​驱动程序。

2 个答案:

答案 0 :(得分:1)

如果可能,我会查看MongoDB 2.2(下一个稳定版本)中可用的新聚合框架。这是你想要完成的吗?

输入:

{_id:1, name:"Jenna"}
{_id:2, name:"Jenna"}
{_id:3, name:"Tom"}
{_id:4, name:"Tom"}
{_id:5, name:"George"}
{_id:6, name:"George"}

命令:

> db.unicorn.aggregate({$group: {_id: "$name"}},{$limit:2})

结果:

{
    "result" : [
        {
            "_id" : "George"
        },
        {
            "_id" : "Tom"
        }
    ],
    "ok" : 1
}

www.mongodb.org/display/DOCS/Aggregation+Framework

答案 1 :(得分:1)

有一个与map reduce关联的限制参数,但是文档说您不能将其与分片群集一起使用。你能否将map reduce的结果输出到一个新的集合,并对集合进行.find()。limit(n)查询?或者您是否试图避免长时间运行的聚合命令,这就是为什么您有兴趣首先限制输出?或者我误解了你的问题?

输入:

{ "_id" : 1, "sender" : "Jenna"}
{ "_id" : 2, "sender" : "Jenna"}
{ "_id" : 3, "sender" : "George"}
{ "_id" : 4, "sender" : "George"}
{ "_id" : 5, "sender" : "Amy"}

MR功能

map = function () {
    emit(this.sender, 1);
}

reduce = function (key, values) {
    return 1;
}

输出:

"results" : [
        {
            "_id" : "Amy",
            "value" : 1
        },
        {
            "_id" : "George",
            "value" : 1
        },
        {
            "_id" : "Jenna",
            "value" : 1
        }
    ]