Получение подмножества полей из MongoDB в Ruby - PullRequest
9 голосов
/ 25 мая 2011

Я пытаюсь получить подмножество полей из 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" ] }

Если я попытаюсь сделать запрос из консоли клиента mongo, он заработает, я получу результаты и подмножество. Я делаю запрос так:

db.tracks.find({title: 'Halo'}, {title:1,isrc:1})

В чем может быть проблема? Я искал решение этой проблемы уже пару часов.

Ответы [ 4 ]

13 голосов
/ 15 сентября 2015

По состоянию на сентябрь 2015 г. эти другие ответы устарели. Вам необходимо использовать метод проекции: #projection(hash)

coll.find({"title" => 'Halo'}).projection({title: 1, isrc: 1})
12 голосов
/ 26 мая 2011

Запрос должен выглядеть следующим образом:

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

Запрос к базе данных

В вашем случае это

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

Но все равно остаетсяпроблема, драйвер ruby ​​игнорирует условие «поля» и возвращает все поля !: \

10 голосов
/ 04 мая 2012

Этот запрос вернет только заголовок и isrc для документа с заголовком "Halo":

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

Обратите внимание на использование хэша для полей, где ключами являются имена полей изначения могут быть 1 или 0, в зависимости от того, хотите ли вы включить или исключить данное поле.

3 голосов
/ 19 января 2016

Вы можете использовать запрос ниже

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

если вы не хотите, чтобы _id был извлечен в случае.

...