如何查询具有包含Mongoid中特定元素集的数组属性的所有记录?

时间:2012-03-12 05:17:34

标签: mongodb mongoid

这是设置。

user has_many skills
skills belongs_to user

我必须找出所有具有ID 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给出了in关键字:

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

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找MongoDB的$all查询运算符:

  

<强> $所有

     

$all运算符类似于$in,但不是匹配指定数组中的任何值,而是必须匹配数组中的所有值。
  [...]
  数组可以包含的元素多于$all条件指定的元素。 $all指定必须匹配的最小元素集。

Mongoid提供对$allall_in的访问权限,我认为这些符号在.all符号上可用,所以我认为:

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

应该适合你。