【问题标题】:Filtering out documents with a specific item in an array field using mongoid使用 mongoid 在数组字段中过滤出具有特定项目的文档
【发布时间】:2014-11-06 06:07:29
【问题描述】:

当 Array 类型的字段包含单个特定值时,是否可以使用 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 的文档。

【问题讨论】:

    标签: ruby-on-rails-3.2 mongoid3


    【解决方案1】:

    我终于找到了这个问题的答案。在找到一些比我最初使用的文档更新的文档(参见here)和一些实验之间,事实证明您可以这样做:

    FooBar.not.all_in(foo: ['b']).not.with_size(foo: 1)
    

    这将选择除数组中包含“b”且数组大小为 1 的文档之外的所有文档。或者换句话说,将过滤掉数组中唯一元素为“b”的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多