2013-08-28 45 views
2

如何在之前对其进行排序缩减操作之前我如何排序集合? 可以说我有这个集合:在地图之前对mongoid集合进行排序减少

{a:1, b:1}, {a:2, b:2}, {a:3, b:e}, {a:1, b:7}

现在,我想的a值进行排序,并返回b的总和,我只需要在x结果(通过a排序)。我怎么能先排序a? 在mongo我可以这样做:

mapReduce(map, reduce, {sort: {a:1}})

我怎么能做到这一点的mongoid?它只接受map_reduce函数的2个参数。

回答

1

检查这个问题后,我发现2种方式:

1 - 使用自带的驱动程序,这样的:

db = Mongoid::Sessions.default 
db.command(
    mapReduce: "messages", 
    map: map, 
    reduce: reduce, 
    query: { ... }, 
    sort: { "a" => -1 }, 
    out: { inline: 1 } 
) 

2 - 通过查找mongoid code我看到的是,即使map_reduce只得到两个参数(映射,减少),您可以链接其他PARAMS(如排序),然后你可以这样做:

Message.sort(a: -1).map_reduce(map, reduce)

重要:在任何情况下,你必须确保该领域你按了指数,为解释here

排序关键字必须在此集合现有索引。

我希望它有帮助。