MongoDB聚合查询报错:Pipeline stage规范对象必须仅含一个字段
问题解答
错误原因
你遇到的报错核心原因是:MongoDB聚合管道的每个阶段必须是独立的对象,每个对象只能包含一个顶级阶段操作符(比如$group、$project)。你的代码里把$group和$project塞进了同一个对象中,违反了这个规则。
修正后的代码
另外注意_id: [Object]是无效写法,结合你后续$project里的字段逻辑,推测你想按resource_subcategory字段分组,调整后的代码如下:
db.collection.aggregate([ { '$match': {} }, { '$group': { _id: "$resource_subcategory", // 根据需求选择聚合操作符,比如收集每组的resource_usage resource_usage_list: { $push: "$resource_usage" } } }, { '$project': { resource_subcategory: '$_id', resource_usage: "$resource_usage_list", _id: 0 // 可选:隐藏默认的_id字段 } } ])
关键说明
- 聚合管道是一个数组,数组的每一项对应一个独立的阶段,每个阶段只能有一个顶级操作符(如
$group、$project),不能合并。 $group阶段的_id是分组依据,必须指定具体的字段路径(如"$resource_subcategory"),不能写[Object]这种无效值。- 分组后如果需要保留原始字段(比如
resource_usage),必须使用MongoDB的聚合操作符(如$push、$sum、$avg等),明确如何处理组内的多个字段值。
内容的提问来源于stack exchange,提问作者user824624
相关产品推荐
相关产品推荐

