在Ruby中从MongoDB检索字段子集

在Ruby中从MongoDB检索字段子集,ruby,mongodb,subset,Ruby,Mongodb,Subset,我试图用Ruby查询MongoDB中的字段子集,但它似乎不起作用。它不会返回任何结果 这是ruby代码: coll.find("title" => 'Halo', :fields => ["title", "isrc"]) #this doesn't work 如果我删除字段散列,它会工作,返回所有字段的结果 coll.find("title" => 'Halo') #this works 查看mongodb控制台,第一个查询在mongodb服务器上结束,如下所示: { t

我试图用Ruby查询MongoDB中的字段子集,但它似乎不起作用。它不会返回任何结果

这是ruby代码:

coll.find("title" => 'Halo', :fields => ["title", "isrc"]) #this doesn't work
如果我删除字段散列,它会工作,返回所有字段的结果

coll.find("title" => 'Halo') #this works
查看mongodb控制台,第一个查询在mongodb服务器上结束,如下所示:

{ title: "Halo", fields: [ "title", "isrc" ] }
db.tracks.find({title: 'Halo'}, {title:1,isrc:1})
如果我尝试从mongo客户端控制台进行查询,它会工作,我会得到结果和子集。我这样问:

{ title: "Halo", fields: [ "title", "isrc" ] }
db.tracks.find({title: 'Halo'}, {title:1,isrc:1})

有什么问题吗?我已经为此寻找了几个小时的解决方案。

查询应该是这样的

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

在你的情况下是这样的

coll.find({"title" => 'Halo'}, {:fields => ["title", "isrc"]})

但是仍然存在一个问题,ruby驱动程序忽略了“字段”的条件,并返回所有字段\

此查询将仅返回标题为“Halo”的文档的标题和isrc:


请注意,对于键为字段名且值为1或0的字段使用哈希,这取决于您是否要包括或排除给定字段。

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


您可以使用下面的查询

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

如果您不想在case中检索_id。

您可以尝试:
coll.find({“title”=>“Halo”},:fields=>[“title”,“isrc”])
请注意,当前的ruby驱动程序将选项键的名称从
:fields
更改为
:projection
。这对我很有效,ruby驱动程序没有忽略“fields”选项。谢谢是的,我错了,ruby驱动程序不会忽略:fields选项。本期ODM中,我使用Mongoid,但在MongoMapper中,它也存在。您可以阅读有关此问题的文章。注意到根据MongoDB文档,您总是可以获得_id,除非您使用字段否定明确排除它。最新的ruby驱动程序(链接)将
字段
选项名更改为
投影
。所以当然
字段
键被忽略。@Vladimir在Mongoid中使用
模型。仅(:title,:isrc)。其中(…)
将正确构造您的对象,但如果您试图访问另一个字段,则会抛出。谢谢-我一直在试图找到如何使用Ruby驱动程序(指定不返回_id字段的投影)来否定字段。对于Ruby驱动程序或
coll.find({“title”=>“Halo”},{projection:{title:1,isrc:1}})来说,这似乎没有很好的文档记录。