0
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/Reduce這樣
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 => false).map_reduce(map,reduce).out(replace:「tags」)' 但是這並沒有奏效 我得到了'undefined method'map_reduce 'for#' –