gpt4 book ai didi

mongodb - Mongoid 3 - 访问 map_reduce 结果

转载 作者:可可西里 更新时间:2023-11-01 10:05:54 26 4
gpt4 key购买 nike

在 mongoid 2 中,这曾经有效:

mr_collection = self.collection.map_reduce(map, reduce, {
:query => query,
:finalize => finalize,
:out => {:replace => 'mr_results'}
})

limit = (options[:limit] || 10)
skip = (options[:skip].to_i || nil)
page = if skip >= limit
((skip+limit) / limit)
else
1
end

sort = if options[:sort_by_vintage]
[['value.vy', :desc], ['value.s', (options[:sort] || :desc)], ['value.pml', :asc]]
elsif options[:sort_by_sDate]
[['value.sDate', :desc], ['value.s', (options[:sort] || :desc)], ['value.pml', :asc]]
else
[['value.s', (options[:sort] || :desc)], ['value.pml', :asc]]
end
paginator = WillPaginate::Collection.new(page, limit, collection_count)
collection = mr_collection.find({},{
:sort => sort,
:limit => limit,
:skip => skip
}
).to_a

我已将 map_reduce 调用更新为:

mr_collection = self.where(query).map_reduce(map, reduce).finalize(finalize).out({:replace => 'mr_results'})

这不再产生任何错误,但是 collection = mr_collection.find.... 无论我尝试什么,它总是失败。以下是一些尝试:

(rdb:1) mr_collection.find.sort(sort)

产生 .rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/debug.rb:130:in `eval': 参数数量错误(1 代表 0)

我看出来了 (rdb:1) mr_collection.class Mongoid::上下文::MapReduce

(rdb:1) mr_collection.find.class
Enumerator

尝试: (rdb:1) mr_collection.sort(排序) .rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/debug.rb:130:in `eval': 参数数量错误(1 代表 0)同样的错误

谢谢你的帮助

更新

通过使用修复它:

collection = mr_collection.find(
:sort => sort,
:limit => limit,
:skip => skip
)

我现在的问题是使用 collection.to_a,我知道它适用于常规哈希,但集合中的结果属于 Moped::BSON::Document 类型。在集合上调用任何 Enumerator 方法都会导致此错误:

undefined method `call' for #<Hash:

我要疯了。请帮忙!!

我尝试过的事情包括:

collection = collection.each {|c| c.to_hash}.to_a

collection = collection.collect {|c| c.to_hash}.to_a

谢谢:)

最佳答案

感谢 Mongoid 谷歌组,终于弄明白了。详情在这里:https://groups.google.com/d/topic/mongoid/T6XhqLtofTE/discussion

唯一的解决办法是:

collection = mr_collection.send(:documents).sort(sort).limit(limit).skip(skip).to_a

在即将发布的 mongoid 版本中,Mongoid::Contextual::MapReduce#documents 将从私有(private)方法更改为公共(public)方法,并且不再需要 .send(:documents)。

关于mongodb - Mongoid 3 - 访问 map_reduce 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com