首页 > 解决方案 > 查询数组并忽略元素的顺序

问题描述

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

{
  "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"]})

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

标签: mongodbpymongo

解决方案


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

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

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

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

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


推荐阅读