MongoDB常规查询运算符与$or组合使用返回非预期结果问题
MongoDB $or 组合查询结果异常解析
问题本质
你第一个查询无匹配结果和$or是否包含单个表达式无关,问题出在$or内部的条件逻辑:
$or数组内的{"bar": "bar","baz": "baz"}属于隐式$and逻辑,要求同时满足bar: "bar"和baz: "baz"两个约束- 你预期匹配的第一条文档的
baz字段值为null,不满足baz: "baz"的要求,所以整个查询无结果属于正常返回,符合MongoDB的查询规则。
$or 单表达式的执行规则
MongoDB 并没有要求$or运算符必须搭配两个及以上表达式才会生效:
- 当
$or数组内仅存在1个表达式时,执行逻辑等价于直接判断该表达式是否成立,没有特殊的降级求值规则 - 你第二个查询能匹配成功,本质是
$or内的{"bar": "bar"}条件符合第一条文档的字段值,和直接写{"foo": "foo", "bar": "bar"}的查询效果完全一致。
如果你需要实现「bar等于bar 或者 baz等于baz」的匹配逻辑,正确写法如下:
{ "foo": "foo", "$or": [ {"bar": "bar"}, {"baz": "baz"} ] }
该查询可以成功匹配到你预期的第一条文档。
内容的提问来源于stack exchange,提问作者Cjoerg
相关产品推荐
相关产品推荐

