2012-03-12 3 views
1

Вот настройка.Как запросить все записи, у которых есть атрибут массива, который содержит определенный набор элементов в Mongoid?

user has_many skills 
skills belongs_to user 

Я бы выяснить, все пользователи, которые имеют навыки работы с идентификаторами 1,2 и 3

можно использовать пересечение трех коллекций пользователей.

Skill.find(1).users & Skill.find(2).users & Skill.find(3).users 

Но это не кажется эффективным. Есть ли запрос в Mongoid/MongoDB, который напоминает следующее?

User.where(:skill_ids.contains=>[1,2,3]) 

PS: Я знаю, что Mongoid дает в ключевом слове:

User.where(:skill_id.in=>[1,2,3]) 

ответ

3

Я думаю, что вы ищете оператор $all запроса MongoDB в:

$ все

Оператор $all похож на $in, но вместо сопоставления любого значения в указанном массиве все значения в массиве должны быть сопоставлены.
[...]
Массив может иметь больше элементов, чем те, которые указаны в критериях $all. $all определяет минимальный набор элементов, которые должны быть сопоставлены.

Mongoid обеспечивает доступ к $all через all_in который я думаю, доступен как .all по символам, так что я думаю, что это:

User.where(:skill_id.all => [1,2,3]) 

должны работать для вас.

Смежные вопросы