【问题标题】:Querying array and ignoring the order of the elements查询数组并忽略元素的顺序
【发布时间】:2020-06-21 19:29:33
【问题描述】:

考虑一个包含以下内容的报告:

{
  "name": "n1",
  "version": "1.0",
  "ids": ["ABC", "XYZ"]
}

我想查找包含该名称、版本和 ID 的所有报告。所以我建立了:

.find({ "name": "n1", "version": "1.0", "ids": ["ABC", "XYZ"]})

但问题是我不知道 ids 数组中元素的顺序。所以以下查询不会返回报告:

.find({ "name": "n1", "version": "1.0", "ids": ["XYZ","ABC"]})

如果数组恰好包含 do 元素,我如何告诉查询匹配?使用 MongoDB 3.2 和 Pymongo。

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    您可以使用 $all 和 $and 运算符,但不是最好的,需要预先确定数组的大小

    .find( { "name": "n1", "version": "1.0" , "ids" : { $all: ["XYZ","ABC"] }, "ids": { $size: 2 }})
    

    我认为这应该适用于 3.2。

    【讨论】:

      【解决方案2】:

      您需要将 $size 与 $all 结合起来,如下所示:

      $all 运算符选择字段值所在的文档 包含所有指定元素的数组

      $size 运算符匹配任何具有元素数量的数组 由参数指定

      {
        "cast": {
          $all: ['Peter Courtney', 'James J. Corbett'],
          $size : 2
        }
      }
      

      但要小心,因为这可能是一项非常昂贵的操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 2022-07-31
        • 2012-10-03
        • 2023-03-21
        • 2018-08-16
        • 2011-02-10
        • 1970-01-01
        相关资源
        最近更新 更多