Найти документы, включающие элемент в поле Array с mongomapper? - PullRequest
4 голосов
/ 28 ноября 2011

Я новичок в mongodb / mongomapper и не могу найти ответ на этот вопрос.

У меня есть класс mongomapper со следующими полями

key :author_id, Integer
key :partecipant_ids, Array

Допустим, у меня есть «запись» со следующими атрибутами:

{ :author_id => 10, :partecipant_ids => [10,15,201] }

Я хочу получить все объекты, в которых участвует компонент с идентификатором 15. Я не нашел никаких упоминаний в документации.

Странно то, что раньше я делал этот запрос

MessageThread.where :partecipant_ids => [15]

, который работал, но после (возможно) некоторого изменения в версии gem / mongodb он перестал работать. К сожалению, я не знаю, какую версию mongodb и mongomapper я использовал раньше.

1 Ответ

8 голосов
/ 28 ноября 2011

В текущих версиях MongoMapper это будет работать:

MessageThread.where(:partecipant_ids => 15)

И это также должно работать ...

MessageThread.where(:partecipant_ids => [15])

... потому что отрывистое авто расширяет это до:

MessageThread.where(:partecipant_ids => { :$in => [15] })

(см. https://github.com/jnunemaker/plucky/blob/master/lib/plucky/criteria_hash.rb#L121)

Я бы сказал, взгляните на ваши данные и опробуйте запросы в консоли Mongo, чтобы убедиться, что у вас есть рабочий запрос. Запросы MongoDB переводятсянепосредственно к запросам MM, за исключением вышеупомянутых (и нескольких других незначительных) предостережений. См. http://www.mongodb.org/display/DOCS/Querying

...