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
相关产品推荐
相关产品推荐

