Когда Ruby видит развернутый хеш в списке аргументов:
o.m(k => v, ...)
предполагается, что вы действительно имеете в виду это:
o.m({ k => v, ... })
Итак, когда вы говорите это:
coll.find('English' => 'fulcrum', {English: 1, Chinese: 1})
Руби видит это:
coll.find({ 'English' => 'fulcrum', {English: 1, Chinese: 1} })
Hash - это совершенно правильный ключ, поэтому Ruby ожидает, что за ним последует => value
:
coll.find('English' => 'fulcrum', {English: 1, Chinese: 1} => some_value)
и вот откуда приходит сообщение об ошибке:
syntax error, unexpected ')', expecting tASSOC
Если вы хотите передать два хэша, вам нужно обернуть первый в фигурные скобки:
coll.find({'English' => 'fulcrum'}, {English: 1, Chinese: 1})
Второй аргумент для [find
] (
http://api.mongodb.org/ruby/current/Mongo/Collection.html#find-instance_method) должен быть опцией Hash, и похоже, что вы хотите опцию :fields
, и вы можете задать массив имен вместо шумного Hash:
coll.find({'English' => 'fulcrum'}, :fields => %w[English Chinese])