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

Nic*_*ima 9 ruby subset mongodb

我试图通过Ruby中的查询从MongoDB获取一个字段的子集,但它似乎不起作用.它不会返回任何结果

这是ruby代码:

coll.find("title" => 'Halo', :fields => ["title", "isrc"]) #this doesn't work
Run Code Online (Sandbox Code Playgroud)

如果我删除字段哈希,它可以工作,返回包含所有字段的结果

coll.find("title" => 'Halo') #this works
Run Code Online (Sandbox Code Playgroud)

看一下mongodb控制台,mongodb服务器上的第一个查询就像这样:

{ title: "Halo", fields: [ "title", "isrc" ] }
Run Code Online (Sandbox Code Playgroud)

如果我尝试从mongo客户端控制台进行查询,它可以工作,我得到结果和子集.我这样做的查询:

db.tracks.find({title: 'Halo'}, {title:1,isrc:1})
Run Code Online (Sandbox Code Playgroud)

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

And*_*w K 13

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

coll.find({"title" => 'Halo'}).projection({title: 1, isrc: 1})
Run Code Online (Sandbox Code Playgroud)

  • 或者`coll.find({"title"=>"Halo"},{projection:{title:1,isrc:1}})`. (2认同)

小智 12

查询应该是这样的

collection.find(selector = {}, opts = {})
Run Code Online (Sandbox Code Playgroud)

查询数据库

在你的情况下它是

coll.find({"title" => 'Halo'}, {:fields => ["title", "isrc"]})
Run Code Online (Sandbox Code Playgroud)

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


jj0*_*j0b 10

此查询将仅返回标题为"Halo"的doc的标题和isrc:

coll.find({"title" => 'Halo'},{:fields => {"_id" => 0, "title" => 1, "isrc" => 1}})
Run Code Online (Sandbox Code Playgroud)

请注意,对于键是字段名称且值为1或0的字段,请使用哈希,具体取决于您是要包含还是排除给定字段.