MongoDB使用$type查询object类型时误返回数组文档如何解决
你的操作没有语法错误,返回结果不符合预期是MongoDB $type 查询运算符的默认特性导致的:
当待查询的字段值为数组时,
$type会同时匹配两种情况:字段本身的类型符合要求,或者数组内的任意元素类型符合要求。
你执行db.collection.find( {a: { $type: "object"}} )时,id为1的文档a字段是数组,数组内的元素为object类型,命中了上述匹配规则,因此也被返回。
如果要仅匹配a字段本身为object类型的文档,排除字段为数组的场景,可以使用$expr结合聚合版本的$type运算符实现,聚合版$type只会返回字段自身的类型,不会递归检查数组内的元素:
db.collection.find({ $expr: { $eq: [ { $type: "$a" }, "object" ] } })
该查询只会返回id为2的文档,匹配你的预期。
内容的提问来源于stack exchange,提问作者Martin Allusse
相关产品推荐
相关产品推荐

