2013-08-28 46 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

排序關鍵字必須在此集合現有索引。

我希望它有幫助。