You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB数组查询能否用$and/$or?为何第一种写法报错?

在MongoDB数组查询中使用$or/$and的正确姿势

首先明确回答你:MongoDB查询数组时完全可以使用$or、$and逻辑运算符,但必须遵循MongoDB对运算符层级的要求。你遇到的第一种写法报错,核心原因是用错了$or的位置。

咱们来拆解两种写法的区别:

为什么第一种写法会报错?

看你写的错误查询语句:

db.inventory.find( { dim_cm: {$or: [ {$gt: 49}, {$size: 1} ] } } )

这里你把$or放在了dim_cm字段的查询条件内部,但$or(包括$and)属于顶级查询运算符——它们的作用是组合多个独立的查询条件文档,而不是作为单个字段的匹配规则。

MongoDB的字段级运算符(比如$gt、$size、$in这些)才是用来定义单个字段的匹配逻辑的,$or不属于这个范畴,所以MongoDB会识别为“未知运算符”,抛出unknown operator $or的错误。

正确写法的逻辑是什么?

你改用的查询语句:

db.inventory.find( { $or: [{dim_cm: {$gt: 49}}, {dim_cm: {$size: 1}}] } )

这里$or作为顶级运算符,正确地组合了两个独立的查询条件:

  • 第一个条件:dim_cm数组中存在至少一个大于49的元素($gt作用于数组时,只要数组里有元素满足条件就匹配)
  • 第二个条件:dim_cm数组的长度恰好为1($size专门匹配数组的长度)

这种写法符合MongoDB的查询语法规范,所以能正常返回结果。

补充小知识点

如果是针对同一个字段的多个条件需要同时满足(逻辑与),其实不需要显式用$and——单个字段下的多个运算符默认就是逻辑与关系。比如要查询dim_cm数组长度为1且元素大于49,直接写:

db.inventory.find( { dim_cm: {$gt: 49, $size: 1} } )

就可以达到和$and组合相同的效果。

内容的提问来源于stack exchange,提问作者Radek Micek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:35:06