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

MongoDB聚合查询:如何替换输出字段名称?

解决MongoDB聚合查询结果字段重命名问题

要替换输出的字段名称,你可以通过在聚合管道末尾添加$project阶段来映射新字段名,或者调整$group阶段的_id结构来简化后续重命名操作。下面给你两种实用的解决方案:

方案一:新增$project阶段映射字段

这是最直观的方式,在现有$group阶段之后添加一个$project,把原有字段映射成你想要的名称,同时可以选择排除默认的_id字段:

db.collection.aggregate([
  {$match: {CREATEDATE: {$gt: new Date(new Date(ISODate().getTime() - 1000*60*60*24))}}},
  {$project: { "HOUR":{"$hour":"$CREATEDATE"}, "PM10":1 }},
  {$group:{ "_id":{"HOUR":"$HOUR"}, "PM10":{$avg:"$PM10"} }},
  // 新增的字段重命名阶段
  {$project: {
    _id: 0, // 移除默认的_id字段
    hour: "$_id.HOUR", // 将_id内的HOUR重命名为hour
    average_pm10: "$PM10" // 将PM10重命名为average_pm10
  }}
])

执行后输出会变成扁平化的友好格式:

{ "hour" : 17, "average_pm10" : 600.361389160156 }

方案二:调整$group的_id结构简化操作

如果你不想额外增加阶段,也可以在$group阶段直接把_id设为小时值,再通过$project完成重命名:

db.collection.aggregate([
  {$match: {CREATEDATE: {$gt: new Date(new Date(ISODate().getTime() - 1000*60*60*24))}}},
  {$project: { "HOUR":{"$hour":"$CREATEDATE"}, "PM10":1 }},
  // 将_id直接设为HOUR值,避免嵌套结构
  {$group:{ "_id":"$HOUR", "PM10":{$avg:"$PM10"} }},
  {$project: {
    _id: 0,
    hour: "$_id",
    average_pm10: "$PM10"
  }}
])

这个方案的输出结果和方案一完全一致,只是$group阶段的_id结构更简洁。

自定义提示

你可以根据业务需求自由修改字段名,比如把hour改成record_hour、average_pm10改成avg_pm10,只要在$project阶段对应好映射关系即可。如果需要保留_id字段,去掉_id:0并重新定义_id的内容就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:44:15