在Ruby中从MongoDB中检索字段的子集

时间:2011-05-25 18:47:34

标签: ruby mongodb subset

我正在尝试使用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})

可能是什么问题?我一直在寻找一个解决方案,现在几个小时。

4 个答案:

答案 0 :(得分:13)

截至2015年9月,这些其他答案已过时。您需要使用投影方法:#projection(hash)

coll.find({"title" => 'Halo'}).projection({title: 1, isrc: 1})

答案 1 :(得分:12)

查询应该看起来像

collection.find(selector = {}, opts = {})

Query the database

在你的情况下,它是

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,请在以后检索。