MongoDB执行含$and、$in的查询时出现"Expected Expression"错误如何处理
MongoDB "Expected Expression" 报错解决方案
报错根因
你提供的查询语句触发语法解析错误,主要由变量未定义、引号格式不兼容、语法冗余三类问题导致,对应修复方案如下:
- 修复
username字段的右值引用
你写的'username': username中右侧的username属于上下文变量,若运行查询的环境中该变量未定义、未赋值为你要匹配的具体值,MongoDB会将其识别为非法表达式触发报错。如果你要匹配固定字符串,直接用引号包裹为字面量即可,例:"username": "admin"。 - 统一使用双引号包裹字段与操作符
MongoDB标准JSON查询语法要求字段名、操作符使用双引号包裹,单引号仅在Mongo Shell交互场景下可临时兼容,如果你在编程语言驱动(Node.js、Python、Java等)中传入查询条件,将单引号替换为双引号即可解决解析问题,修正后的语法如下:{ "$and": [ { "username": "你的目标查询值" }, { "device_id": { "$in": [] } } ] } - 省略冗余的
$and操作符
MongoDB的查询条件默认是逻辑与关系,多个并列条件不需要显式声明$and,简化写法可以降低语法出错概率:{ "username": "你的目标查询值", "device_id": { "$in": [] } } - 补充说明:
$in: []本身属于合法语法,执行时会匹配不到任何device_id的文档,如果你需要匹配device_id为空或者不存在的场景,可调整为"device_id": null的查询条件即可。
内容的提问来源于stack exchange,提问作者Amit Tayade
相关产品推荐
相关产品推荐

