MongoDB属性值匹配疑问:为何返回数组文档?如何严格匹配?
MongoDB数组字段匹配问题解答
1. 该行为是否属于bug?
这不是bug,是MongoDB官方明确规定的默认匹配规则:
- 当查询条件为
{ 字段: 值 }时,会同时匹配两种场景:- 字段的值直接等于查询值;
- 字段是数组且包含查询值。
这种设计是为了简化数组包含查询的写法,无需额外操作符就能快速匹配数组内的元素。
2. 如何实现严格相等匹配?
要仅匹配字段值**完全等于目标值(非数组包含)**的文档,可通过以下两种方式实现:
方式一:结合$eq和$type指定类型与值
{ $match: { prop: { $eq: 1, $type: "int" } } }
注意:如果你的数值类型是
double,将"int"替换为"double"即可,需根据实际数据类型调整。
方式二:使用$expr表达式同时校验值和类型
{ $match: { $expr: { $and: [ { $eq: ["$prop", 1] }, { $eq: [{ $type: "$prop" }, "int"] } ] } } }
这种方式更灵活,适合需要自定义复杂匹配逻辑的场景。
内容的提问来源于stack exchange,提问作者Mo B.
相关产品推荐
相关产品推荐

