【问题标题】:Map/Reduce Operation on Mongoid Criteria in version 2版本 2 中 Mongoid Criteria 的 Map/Reduce 操作
【发布时间】:2012-10-15 06:43:25
【问题描述】:

我是否正确,因为 MongoId 版本 2+ 的 Mongoid Criteria 上没有 MongoDB map/reduce 功能

谁能证实我有一个标准

这里是我的查询

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' for #

检查 map/reduce 是否可用

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

PerformerSource.respond_to?(:map_reduce)
=> false

所以我相信我是正确的,因为我看到 Mongoid-3 提供了在 here 上的 Mongoid-criteria 中添加 map/reduce 的规定,但在 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 功能

【问题讨论】:

    标签: mongodb mapreduce mongoid


    【解决方案1】:

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

    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(..)

    【讨论】:

    • 如果我错了,我怀疑它会根据附加到它的标准触发一个 `Performer.active_performers.order_by([:sort_order,:desc]).map_reduce' 纠正我
    • 我不太明白你在这里说什么。顺便说一句,除非你限制结果的数量,否则这个顺序真的没什么意义。
    • 我说你正在附加一个 map reduce 函数 klass.collection 将返回结果 Performer.active_performers.order_by([:sort_order,:desc]) 的标准定义然后在其上操作 map-reduce 进一步 map_reduce 之后的标准将起作用
    • klass.collection.map_reduce 接收原始选择器作为 :query 参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多