【问题标题】:map/reduce is failing on Mongoidmap/reduce 在 Mongoid 上失败
【发布时间】:2012-10-19 13:14:00
【问题描述】:

我有这样的课

class Todo

  TAG_REGEX = /(?:^|\s)#(\w+)/i

  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::FullTextSearch

  field :desc, type: String
  field :done, type: Boolean, default: false
  field :tags, type: Array

end

我正在尝试像这样映射/减少标签

map = %Q{
  function() {
    this.tags.forEach(function(tag){
      emit(tag, { count: 1 });
    }
  }
}

reduce = %Q{
  function(key, values) {
    var result = { count: 0 };
    values.forEach(function(value) {
      result.count += value.count;
    });
    return result;
  }
}

@map = Todo .map_reduce(map, reduce).out(replace: "tags")

当我尝试迭代结果时,我看到了这个异常

The operation: #<Moped::Protocol::Command
  @length=480
  @request_id=316
  @response_to=0
  @op_code=2004
  @flags=[]
  @full_collection_name="todozen_development.$cmd"
  @skip=0
  @limit=-1
  @selector={:mapreduce=>"todos", :map=>"\n      function() {\n        this.tags.forEach(function(tag){\n          emit(tag, { count: 1 });\n        }\n      }\n    ", :reduce=>"\n      function(key, values) {\n        var result = { count: 0 };\n        values.forEach(function(value) {\n          result.count += value.count;\n        });\n        return result;\n      }\n    ", :query=>{}, :sort=>{"created_at"=>-1}, :out=>{:replace=>"tags"}}
  @fields=nil>
failed with error "ns doesn't exist"

我在这里错过了什么?
有人需要更多信息吗?
谢谢

【问题讨论】:

  • 我看到 Todo 类嵌入在 User 类中......所以我尝试了这个@tags = current_user.todos.where(:done =&gt; false).map_reduce(map,reduce).out(replace: "tags") 但这也没有用我得到了undefined method 'map_reduce' for #&lt;Mongoid::Contextual::Memory:0x007fad61bf7258&gt;

标签: ruby ruby-on-rails-3 mapreduce mongoid mongoid3


【解决方案1】:

Todo是一个嵌入式类...没有办法映射/减少一个嵌入式类...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2023-03-23
    • 2017-09-20
    相关资源
    最近更新 更多