MongoDB聚合查询报Unexpected token :错误,求修正及实现统计需求
修复MongoDB聚合查询中的「Unexpected token :」错误
首先,你的查询报错是因为嵌套逻辑运算符($or/$and)的语法格式错误——在$and数组内部直接使用了"$or": [...]这样的裸键值对写法,而MongoDB要求每个逻辑运算符的参数必须是条件对象组成的数组,不能把键值对直接丢进数组里。
错误的核心位置
比如原查询里这段有问题的代码:
"$and":[ "$or": [{ "$and":[{ "status":"drafted"}, { "color":{$in:["blue"]}} ]}, ... ]
这里$and的数组元素应该是一个包含$or的完整对象,而不是直接把"$or": [...]作为数组元素,正确结构应该是"$and": [ { "$or": [ ... ] } ]。
修正后的完整查询语句
下面是修正了所有语法错误、同时完全保留你原有业务逻辑的聚合查询:
db.getCollection("products_data").aggregate([ { "$unwind": { "path": "$color", "preserveNullAndEmptyArrays": true } }, { "$match": { "country": "UK", "$or": [ { "$and": [ { "$or": [ { "$and": [{ "status": "drafted" }, { "color": { $in: ["blue"] } }] }, { "$and": [{ "status1": "complete" }, { "status2": { $nin: ["n/a", "drafted", "complete"] } }, { "color": { $in: ["green"] } }] } ] } ] }, { "$and": [ { "$or": [ { "$and": [{ "status": "drafted" }, { "color": { $in: ["blue"] } }] }, { "$and": [{ "status1": "complete" }, { "status2": { $nin: ["n/a", "drafted", "complete"] } }, { "color": { $in: ["green"] } }] } ] } ] } ] } }, { "$group": { "_id": "$field", "products": { $sum: 1 }, "bid": { "$push": "$product_id" } } }, { "$project": { "field": "$_id", "products": "$products", "bid": 1, "_id": 0 } } ]);
额外说明
- 我把所有聚合阶段统一放进了一个数组(MongoDB的
aggregate()方法规范参数就是阶段数组,原写法虽能运行但不够规范) - 修正了所有嵌套逻辑运算符的结构:每个
$and/$or的参数都是数组,数组内的每个元素是完整的条件对象 - 完全保留了你原本的业务筛选逻辑,仅修正语法格式
内容的提问来源于stack exchange,提问作者oldrock
相关产品推荐
相关产品推荐

