gpt4 book ai didi

mongodb - 版本 2 中 Mongoid 标准的映射/缩减操作

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

我是否正确,MongoDB map/reduce 功能在 MongoId 版本 2+ 的 Mongoid Criteria 上不可用

谁能证实这一点我有一个标准

这是我的查询

class PerformerSource
scope :active_performers,where(:active => true).only([:performer_id, :sort_order,:stage_name, :photo, :large_photo, :status, :current_performance_type,:current_sign_in_at])
end

PerformerSource.active_performers.order_by([:sort_order,:desc])

我想对其应用 map/reduce 函数

像这样

PerformerSource.active_performers.order_by([:sort_order,:desc]).map_reduce(PerformerSource.map,PerformerSource.reduce)

但是每当我这样做时它都会返回错误

NoMethodError:# 的未定义方法“map_reduce”

检查 map/reduce 是否可用

PerformerSource.active_performers.order_by([:sort_order,:desc]).respond_to?(:map_reduce)
=> false

PerformerSource.respond_to?(:map_reduce)
=> false

所以我的信念是否正确,因为我看到 Mongoid-3 提供了在 Mongoid-criteria 中添加 map/reduce over here 的规定但在 mongoid 2 中找不到相同的内容

我可以升级 mongoid(我希望我可以),因为应用程序运行在 Ruby-1.8.7 上,而 mongoid 3 需要 ruby​​-1.9+

因此,如果 map/reduce 无法按照标准运行,请告诉我如何运行 map/reduce 然后考虑其他条件,即active_performers.order_by([:sort_order,:desc])

注意:为了清楚起见,我没有添加ma​​preduce 函数

最佳答案

我制作了以下猴子补丁,我正在生产中使用它:


module Mongoid

module Criterion #:nodoc:
module MapReduce
def map_reduce(map, reduce, options = {})
opts = {:out => {:inline => 1}, :raw => true, :query => selector}.merge(options)
klass.collection.map_reduce(map, reduce, opts)
end
alias :mapreduce :map_reduce
end
end

end

这样我就可以根据条件执行 map-reduce。如果你想在 all 上执行它,那么要么使用 .all 要么 .scoped(我更喜欢),比如 PerformerSource.scoped.map_reduce(..)

关于mongodb - 版本 2 中 Mongoid 标准的映射/缩减操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890522/

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