如何在对其执行 map reduce 操作之前对集合进行排序?假设我有这个系列:
{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 个参数。
如何在对其执行 map reduce 操作之前对集合进行排序?假设我有这个系列:
{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 - 使用本机驱动程序,例如:
db = Mongoid::Sessions.default
db.command(
mapReduce: "messages",
map: map,
reduce: reduce,
query: { ... },
sort: { "a" => -1 },
out: { inline: 1 }
)
2 - 通过查看 mongoid代码,我看到即使map_reduce
只有两个参数(map 和 reduce),您也可以链接其他参数(如排序),然后您可以执行以下操作:
Message.sort(a: -1).map_reduce(map, reduce)
重要提示:无论如何,您必须确保您排序的字段具有索引,如下所述:
排序键必须在此集合的现有索引中。
我希望它有所帮助。