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

MongoDB聚合:如何在$group阶段用$push直接生成数组以省略$project

如何省略$project阶段直接在$group中构造并推送数组

我来帮你搞定这个问题!其实完全可以省略掉$project阶段,直接在$group里完成数组的构造和推送。你之前尝试出错大概率是因为没把数组结构正确嵌套在$push的参数里,下面是修正后的聚合管道:

{
  $group: {
    _id: { type: "$_id.type" },
    datapoints: {
      $push: [
        { $multiply: ["$_id.timestamp", 1000] },
        "$count"
      ]
    }
  }
}

为什么这个写法可行?

原来的$project阶段只是把每个文档转换成包含type和datapoints数组的结构,现在我们直接把这个数组的构造逻辑移到了$group的$push操作里:

  • 对每个进入$group阶段的文档,直接计算{ $multiply: ["$_id.timestamp", 1000] }得到毫秒级时间戳
  • 把这个计算结果和$count值一起组成一个数组
  • 最后通过$push把这个数组追加到对应type分组的datapoints数组中

这样就完全替代了原来的两个阶段,逻辑和结果完全一致,还减少了管道步骤,效率更高。

需要注意:要确保你的原始数据(或$group之前阶段的输出)里确实存在_id.type、_id.timestamp和count字段,不然可能会出现null值或者计算异常哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:51:00