我正在尝试使用Ruby中的查询从MongoDB获取字段的子集,但它似乎不起作用。它不会返回任何结果
这是红宝石代码:
coll.find("title" => 'Halo', :fields => ["title", "isrc"]) #this doesn't work
如果我删除字段哈希,它可以工作,返回包含所有字段的结果
coll.find("title" => 'Halo') #this works
查看mongodb控制台,mongodb服务器上的第一个查询结束如下:
{ title: "Halo", fields: [ "title", "isrc" ] }
如果我尝试从mongo客户端控制台进行查询,它可以工作,我得到结果和子集。我做这样的查询:
db.tracks.find({title: 'Halo'}, {title:1,isrc:1})
可能是什么问题?我一直在寻找一个解决方案,现在几个小时。
答案 0 :(得分:13)
截至2015年9月,这些其他答案已过时。您需要使用投影方法:#projection(hash)
coll.find({"title" => 'Halo'}).projection({title: 1, isrc: 1})
答案 1 :(得分:12)
查询应该看起来像
collection.find(selector = {}, opts = {})
在你的情况下,它是
coll.find({"title" => 'Halo'}, {:fields => ["title", "isrc"]})
但仍然存在问题,ruby-driver忽略了“fields”的条件,并返回所有字段! :\
答案 2 :(得分:10)
此查询将仅返回标题为“Halo”的文档的标题和isrc:
coll.find({"title" => 'Halo'},{:fields => {"_id" => 0, "title" => 1, "isrc" => 1}})
请注意,对于字段名称且值为1或0的字段使用哈希值,具体取决于您是要包含还是排除给定字段。
答案 3 :(得分:3)
您可以使用以下查询
coll.find({"title" => 'Halo'}).projection({title: 1, isrc: 1, _id: 0})
如果您不想要_id,请在以后检索。