MongoDB中如何检查数组是否恰好包含指定元素(顺序无关)
MongoDB 查询数组恰好包含指定元素(顺序无关)
要实现数组仅包含['123','456']或['456','123'](顺序不影响,无其他元素)的查询,需要结合几个条件来精准匹配:
- 用
$all确保数组包含所有目标元素 - 用
$size限制数组长度必须等于目标元素的数量(此处为2) - 若要严格避免数组含重复元素(比如['123','123','456']这类不符合需求的情况),可以用
$expr配合$setEquals直接对比集合
基础查询语句(适用于数组无重复元素的场景)
db.collection.find({ users: { $all: ['123', '456'], $size: 2 } })
这个查询会返回所有users数组恰好包含'123'和'456'两个元素的文档,自动忽略元素顺序,同时保证数组无额外元素。
严谨版查询(支持自动去重后对比集合)
如果需要完全贴合set(users) == set(['123','456'])的逻辑,不管数组有没有重复元素,都可以用:
db.collection.find({ $expr: { $setEquals: ['$users', ['123', '456']] } })
$setEquals会直接对比两个数组的元素集合是否完全一致,自动忽略顺序和重复元素。
内容的提问来源于stack exchange,提问作者Julio Raposo
相关产品推荐
相关产品推荐

