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

MongoDB聚合中如何转换嵌入式文档数组的ObjectId字段为字符串

问题原因

你遇到的报错是因为orders是数组类型,MongoDB无法直接对数组内所有元素的嵌套字段批量执行$toString转换,必须先遍历数组内的每个订单对象单独处理字段。

正确的聚合写法

你不需要单独配置'orders._id'的转换,而是用$map运算符迭代整个orders数组,对每一项的字段做处理,修改后的完整聚合语句如下:

[
  {
    $lookup: {
      from: 'orders',
      localField: 'id',
      foreignField: 'user_id',
      as: 'orders',
    },
  },
  { 
    $project: {
      _id: { $toString: '$_id' },
      name: 1,
      orders: {
        $map: {
          input: '$orders', // 指定要遍历的订单数组
          as: 'orderItem', // 给遍历到的单条订单设置别名
          in: { // 定义处理后的单条订单结构
            _id: { $toString: '$$orderItem._id' }, // 对单条订单的_id做字符串转换
            order: '$$orderItem.order' // 保留原有订单内容字段
          }
        }
      }
    },
  }
]

这个写法会完全匹配你需要的输出结构:外层用户的_id转成字符串,orders数组内每条订单的_id也转成字符串,同时保留所有需要的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:51:03