如何在之前对进行排序?对其执行地图缩小操作? 假设我有这个系列:
{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个参数。
答案 0 :(得分:1)
在检查此问题后,我找到了两种方法:
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
只获得两个参数(map和reduce),你可以链接其他参数(如排序)然后你可以做一些事情像:
Message.sort(a: -1).map_reduce(map, reduce)
重要:无论如何,您必须确保排序的字段具有索引,如here所述:
排序键必须位于此集合的现有索引中。
我希望它有所帮助。