如何编写MongoDB查询筛选嵌套数组不含指定ID元素的文档
解决MongoDB筛选readIds数组不含指定id的文档问题
你的查询逻辑有误,原语句会尝试匹配readIds数组中存在id不等于目标值的元素的文档,但这无法覆盖readIds为空数组的情况,也不符合你要找“完全没有指定id”的需求。
正确的查询语句应该是:
.find({ readIds: { $not: { $elemMatch: { id: '62c56b2cffe059fdfdd19230' } } } })
逻辑说明
这个查询的核心是用$not否定$elemMatch的匹配结果:
$elemMatch: { id: 'xxx' }会匹配那些readIds数组中存在指定id元素的文档- 加上
$not后,就会筛选出所有不满足上述条件的文档,包括:- readIds为空数组的文档
- readIds数组中所有元素的id都不等于指定值的文档
这样就能精准得到你需要的结果。
内容的提问来源于stack exchange,提问作者Andrey Shostik
相关产品推荐
相关产品推荐

