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

如何使用$objectToArray将MongoDB订单日志按订单号合并为单条文档

MongoDB按订单号合并日志解决方案

你当前的问题核心是没有使用分组聚合阶段,仅对单条文档做字段投影自然无法合并同订单的多条记录,而且$objectToArray运算符不符合当前需求,它的作用是将单个对象转换为[{k:键名,v:键值}]格式的数组,不是用来做多文档聚合的。

正确的聚合查询语句如下:

db.collection.aggregate([
  // 第一步:按订单号分组,合并同订单的所有日志
  {
    $group: {
      _id: "$ordernumber",
      ordername: { $first: "$ordername" },
      orderlogs: {
        $push: {
          status: "$status",
          modifiedat: "$modifiedat"
        }
      }
    }
  },
  // 第二步:调整输出字段格式,符合预期效果
  {
    $project: {
      _id: 0,
      ordernumber: "$_id",
      ordername: 1,
      orderlogs: 1
    }
  }
])

语句逻辑说明

  • $group阶段:以ordernumber作为分组标识,同一个订单号的所有文档会被分到同一组
    • $first用于提取同组内第一条文档的ordername(同一个订单号对应的订单名全局唯一,使用$first、$last均可)
    • $push会把同组内每条文档的status和modifiedat组成的对象,依次放入orderlogs数组中
  • $project阶段:去掉默认返回的_id字段,将分组用的_id重命名为ordernumber,调整为你需要的输出结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:15:04