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 个参数。

4

1 回答 1

1

检查此问题后,我发现了两种方法:

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)

重要提示:无论如何,您必须确保您排序的字段具有索引,如下所述

排序键必须在此集合的现有索引中。

我希望它有所帮助。

于 2013-08-29T17:20:39.437 回答