Mongoid如何查询所有嵌入Album文档producer均为指定值的Band记录
正确查询方案
你可以通过反向排除逻辑实现需求:筛选出不存在任何一张专辑的producer不等于"George Martin"的乐队即可,对应的Mongoid查询语句如下:
Band.where.not('albums' => { :$elemMatch => { producer: { :$ne => 'George Martin' } } })
原理解释
$elemMatch用于匹配数组中满足指定条件的元素producer: { $ne: 'George Martin' }规则匹配所有制作人不是George Martin的专辑- 外层嵌套
where.not后,就可以排除所有存在不符合要求专辑的乐队,剩余结果就是所有专辑制作人都为George Martin的乐队
可选补充
如果你不需要将没有专辑的乐队纳入结果,可以额外加条件过滤空数组:
Band.where.not('albums' => { :$elemMatch => { producer: { :$ne => 'George Martin' } } }) .where(:albums.nin => [[], nil])
内容的提问来源于stack exchange,提问作者onda47
相关产品推荐
相关产品推荐

