mongodb - 查询数组并忽略元素的顺序
问题描述
考虑一个包含以下内容的报告:
{
"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。
解决方案
您需要将 $size 与 $all 结合起来,如下所示:
$all
运算符选择字段值是 包含所有指定元素的数组的文档
$size
运算符匹配具有参数指定的元素数量的任何数组
{
"cast": {
$all: ['Peter Courtney', 'James J. Corbett'],
$size : 2
}
}
但要小心,因为这可能是一项非常昂贵的操作。
推荐阅读
- r - 使用 R 中的复杂条件将组复制到单独的表中
- jquery - 没有工具栏的 OnesenUI 中的链接页面
- laravel - 如何在 laravel 中读取 yaml 文件?
- typescript - 使用参数调用对象的成员
- javascript - 将 react 渲染方法拆分为单独的 npm 包
- java - java.lang.NoClassDefFoundError:无法在 Windows 10 上初始化类 org.rocksdb.Options
- javascript - 如何使用 Ramda 将代码从 Lisp(MIT Schema)翻译成 JavaScript?
- c - 术语和代码线的平等
- angular - 角度清理变音符号的问题
- php - 使用 Angular.js 和 PHP 重新加载页面时获取空白页面