Ruby on rails 3.2 使用mongoid筛选出数组字段中具有特定项的文档

Ruby on rails 3.2 使用mongoid筛选出数组字段中具有特定项的文档,ruby-on-rails-3.2,mongoid3,Ruby On Rails 3.2,Mongoid3,当数组类型的字段包含单个特定值时,是否有方法使用Mongoid 3.1.6过滤掉文档 例如,假设我有以下4个文档 {foo: ['a', 'b', 'c'], bar: 1} {foo: ['b'], bar: 2} {foo: ['a', 'c'], bar: 3} {foo: [], bar: 4} {bar: 5} 在本例中,我想过滤掉字段foo仅包含值“b”的所有文档。如果它包含“b”和其他值,或者根本不包含“b”,或者甚至是空的,那么应该返回文档。因此,当查询上述文档集时,我应该返回

当数组类型的字段包含单个特定值时,是否有方法使用Mongoid 3.1.6过滤掉文档

例如,假设我有以下4个文档

{foo: ['a', 'b', 'c'], bar: 1}
{foo: ['b'], bar: 2}
{foo: ['a', 'c'], bar: 3}
{foo: [], bar: 4}
{bar: 5}

在本例中,我想过滤掉字段foo仅包含值“b”的所有文档。如果它包含“b”和其他值,或者根本不包含“b”,或者甚至是空的,那么应该返回文档。因此,当查询上述文档集时,我应该返回bar为1、3、4和5的文档,但不是bar=2的文档。

我终于找到了这个问题的答案。在查找比我最初使用的更多的最新文档和一些实验之间,您可以做到这一点:

FooBar.not.all_in(foo: ['b']).not.with_size(foo: 1)
这将选择除数组中带有“b”且数组大小为1的文档以外的所有文档。换句话说,数组中只有“b”元素的文档将被过滤掉