ruby - MongoDB 和 MongoRuby : Sorting on mapreduce

标签 ruby mongodb mapreduce

我目前正在尝试对存储在 MongoDB 中的一些文档进行简单的 mapreduce。我用

map = BSON::Code.new "function() { emit(this.userid, 1); }"

用于映射和

reduce = BSON::Code.new "function(key, values) {
   var sum = 0;
   values.forEach(function(value) {
    sum += value;
   });
   return sum;
}"

为减少。当我按以下方式调用 map_reduce 时,效果很好:

output = col.map_reduce(map, reduce, # col is the collection in mongodb, e.g. db.users
            {
                :out => {:inline => true},
                :raw => true
            }
          )

现在是真正的问题:如何使用对 map_reduce 的上层调用来启用排序? The manual says ,我必须使用 sort[key, direction] 对数组。我猜以下应该有效,但它不起作用:

output = col.map_reduce(map, reduce,
            {
                :sort => [["value", Mongo::ASCENDING]],
                :out => {:inline => true},
                :raw => true
            }
          )

我必须选择另一种数据类型吗?当使用空的 [] 时,该选项也不起作用(同样的错误),尽管手册上说这是该选项的默认值。不幸的是,来自 MongoDB 的错误消息并没有太大帮助:

/usr/lib/ruby/gems/1.9.1/gems/mongo-1.3.1/lib/mongo/db.rb:506:in `command': Database command 'mapreduce' failed: {"assertion"=>"sort has to be blank or an Object", "assertionCode"=>13609, "errmsg"=>"db assertion failure", "ok"=>0.0} (Mongo::OperationFailure)
    from /usr/lib/ruby/gems/1.9.1/gems/mongo-1.3.1/lib/mongo/collection.rb:576:in `map_reduce'
    from ./mapreduce.rb:26:in `<main>'

如果您需要完整的可运行代码,请在评论中说明。我暂时排除它,因为它只包含初始化与 mongodb 的连接和通过查询数据库初始化集合 col

最佳答案

使用 BSON::OrderedHash 就可以了。

output = col.map_reduce(map, reduce,
    {
         :sort => BSON::OrderedHash.new[{"value", Mongo::ASCENDING}],
         :out => {:inline => true},
         :raw => true
    }
)

关于ruby - MongoDB 和 MongoRuby : Sorting on mapreduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7741734/

相关文章:

ruby-on-rails - RSPEC 测试名称错误 - 未定义的局部变量或方法

用于 PIC32 微 Controller 的 Ruby

javascript - require 在 node.js 中的行为

hadoop - 在Hadoop中使用Avro输入格式控制拆分大小

java - Hadoop <init> 没有这样的方法异常

hadoop - 作为输入可以使用Apache Pig Load Function Bag吗?

ruby - 如何检查字符串是否以 Liquid 中的特定子字符串结尾?

ruby - 如何在 vim 的 ruby​​ 执行之间保存变量?

mongodb - 使用先前的序列号或时间戳运行时,从 Kinesis 读取给出空记录

mysql - 在MongoDB中,如何查询类似于Twitter的内容?