MongoDB查询数组首元素qty为null返回全部文档原因求解
这个问题是MongoDB的null值查询默认规则导致的,具体原因如下:
- 在MongoDB中,直接写
{ <字段>: null }作为查询条件时,默认会匹配两种文档:一种是该字段确实存在且值为null,另一种是该字段根本不存在于文档中。 - 你查询的是数组嵌套字段
instock.0.qty,MongoDB处理数组嵌套字段的null匹配时,会额外做全数组的字段存在性校验,导致所有文档都被命中。
如果要实现你预期的「仅匹配第一个元素的qty字段确实存在且值为null」的效果,需要用$type操作符明确指定匹配BSON的null类型(null对应的BSON类型编号为10),修改后的查询语句如下:
db.inventory.find({"instock.0.qty": { $type: 10 }})
执行上面的查询就只会返回第一条符合预期的文档了。
内容的提问来源于stack exchange,提问作者Feliks Yaretskiy
相关产品推荐
相关产品推荐

