2
我目前正试图对存储在MongoDB中的一些文档做一个简单的mapreduce。我用MongoDB和MongoRuby:在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;
}"
的减少。
output = col.map_reduce(map, reduce, # col is the collection in mongodb, e.g. db.users
{
:out => {:inline => true},
:raw => true
}
)
现在到了真正的问题:我如何可以使用map_reduce
上呼叫,能在排序时我打电话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
。
怎么样:排序=> {“价值”,蒙戈:: ASCENDING} .. – RameshVel
这改变了错误信息'不能创建在[收藏]光标查询:{}排序:{值:1}'。 – evnu