MongoDB嵌套数组$all操作符失效问题及查询需求咨询
MongoDB嵌套数组的两种匹配查询方案
需求1:匹配任意嵌套数组元素包含指定所有值的文档
需要查询wordArrays数组中至少有一个子数组同时包含"Hello"和"World"的文档(示例文档符合此条件)。
Find阶段查询语句
db.collection.find({ wordArrays: { $elemMatch: { $all: ["Hello", "World"] } } })
说明
$elemMatch用于定位嵌套数组中满足条件的子元素$all确保目标子数组包含指定的所有值- 此查询会匹配示例文档,因为
wordArrays的第一个子数组同时包含"Hello"和"World"
需求2:匹配所有嵌套数组元素都包含指定所有值的文档
需要查询wordArrays数组中每一个子数组都同时包含"Hello"和"World"的文档(示例文档不符合此条件)。
Find阶段查询语句
db.collection.find({ wordArrays: { $not: { $elemMatch: { $or: [ { $nin: ["Hello"] }, { $nin: ["World"] } ] } } } })
说明
- 通过反向逻辑验证:排除存在任何一个子数组缺少
"Hello"或"World"的文档 $not配合$elemMatch,确保所有子数组都符合要求- 示例文档中第二个子数组
["The", "Sun", "Shines"]不包含指定值,因此不会被此查询匹配
示例数据
[ { "words": [ "Hello", "World", "!"], "wordArrays": [ ["Hello", "World", "!"], ["The", "Sun", "Shines"] ] } ]
内容的提问来源于stack exchange,提问作者Arkensor
相关产品推荐
相关产品推荐

