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

MongoDB聚合查询$group阶段如何将kid字段别名改为knowledge_id

报错原因

MongoDB的$group聚合阶段有固定语法规则:仅_id字段可直接指定为分组依据的表达式,其余所有自定义字段都必须通过累加器(如$sum、$first等)计算生成,你直接修改分组键字段名不符合语法要求,因此触发报错。

解决方案

以下是两种常用实现方案,效果完全一致:

方案1:分组后通过$project重命名(更直观易维护)

db.getCollection('register').aggregate( [
  { $match: {"$or":[{"$and":[{"src":{"$in":["CR","FR"]}},{"status":{"$in":["Draft","InReview","Returned"]}},{kid:3940035}]}]} },
  { $group: {'_id':"$kid",'count':{'$sum':1}} },
  { $project: {
    _id: 0,
    knowledge_id: "$_id",
    count: 1
  } }
] )

该方案保留原来的分组逻辑,仅在最后输出阶段重命名字段、隐藏不需要的_id字段即可。

方案2:分组阶段直接生成目标字段

db.getCollection('register').aggregate( [
  { $match: {"$or":[{"$and":[{"src":{"$in":["CR","FR"]}},{"status":{"$in":["Draft","InReview","Returned"]}},{kid:3940035}]}]} },
  { $group: {
    '_id':"$kid",
    'knowledge_id': {$first: "$kid"},
    'count':{'$sum':1}
  } },
  { $project: {_id: 0} }
] )

该方案利用同一分组内kid值完全相同的特性,用$first累加器提取kid值赋值给knowledge_id,最后移除默认返回的_id字段即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:42:02