-
Type: Task
-
Resolution: Done
-
Priority: Blocker - P1
-
Affects Version/s: 2.0.6
-
Component/s: None
-
None
In the process of upgrading from 1.8 to 2.0.6, I've tried to convert the following query:
col.map_reduce(map, reduce, :query => query, :out => "foobar", :read => :primary)
{code]
I've rewritten it as follows:
col.find(query).map_reduce(map, reduce, :out => "foobar", :read => :primary)
When calling `.to_a` on the above `Mongo::Collection::View::MapReduce` object, I get the following error:
NoMethodError: undefined method `values' for "ASEMASMWRE":String
from /Users/nick/.gem/ruby/2.1.5/gems/mongo-2.0.6/lib/mongo/collection/view/map_reduce.rb:195:in `fetch_query_spec`
It seems that `#fetch_query_spec` always expects a hash as the value of the `:out` option:
def fetch_query_spec
{ :selector => {},
:options => {},
:db_name => database.name,
:coll_name => out.values.first } # <-- expects a hash
end
But looking at the docs, I see that it's valid to also pass just a string: http://docs.mongodb.org/manual/reference/method/db.collection.mapReduce/#output-to-a-collection. If this behavior was not intented and the driver should really accept strings too, I think that this would be a proper fix:
def fetch_query_spec
{ :selector => {},
:options => {},
:db_name => database.name,
:coll_name => out.is_a?(String) ? out : out.values.first } # also accept a string
end
What do you think? If that makes any sense I'd be happy to prepare and submit a PR.
Thanks.