在map reduce之前对mongoid集合进行排序

时间:2013-08-28 15:42:03

标签: ruby-on-rails ruby-on-rails-3 mongodb sorting 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 个答案:

答案 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所述:

  

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

我希望它有所帮助。