这是一个新手问题。我在YARD Rdoc中找到了方法定义:
(Object) find(selector = {}, opts = {})
Options Hash (opts):
:fields (Array, Hash)
然后我尝试这个coll.find('English'=>'支点',{英语:1,中文:1}),想要结果'英语'字段是支点,只返回英文和中文字段,但Ruby用这个来惩罚我
irb(main):018:0> coll.find('English' => 'fulcrum',{English:1,Chinese:1})
SyntaxError: (irb):18: syntax error, unexpected ')', expecting tASSOC
from /usr/local/bin/irb:12:in `<main>'
irb(main):019:0>
我想知道原因,谢谢
通过@mu的建议纠正语法问题后,我收到了未知选项错误:
irb(main):013:0> coll.find({English:'fulcrum'},{English:1, :Chinese => 1})RuntimeError: Unknown options [{:English=>1, :Chinese=>1}]
from /usr/local/lib/ruby/gems/1.9.1/gems/mongo-1.5.2/lib/mongo/collection.rb:234:in `find'
from (irb):13
from /usr/local/bin/irb:12:in `<main>'
irb(main):014:0>
答案 0 :(得分:2)
当Ruby在参数列表中看到一个未包装的Hash时:
o.m(k => v, ...)
它假设你真的是这个意思:
o.m({ k => v, ... })
所以,当你这样说时:
coll.find('English' => 'fulcrum', {English: 1, Chinese: 1})
Ruby看到了这个:
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
选项,你可以给出一个名字数组而不是一个嘈杂的哈希:
coll.find({'English' => 'fulcrum'}, :fields => %w[English Chinese])