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

MongoDB聚合$lookup后$project字段返回数组问题如何解决

问题原因

$lookup 操作返回的as指定字段默认是数组类型,即便满足关联条件的文档只有1条,bookingCreator也会是长度为1的数组。直接取$bookingCreator.firstName获取到的就是数组内的属性集合,自然是Array类型,不是预期的字符串。

修复方案

在$lookup之后、$project之前添加一个$addFields阶段,把bookingCreator数组的第一个元素提取出来转为对象即可,修改后的完整聚合语句如下:

[
    {
        '$match': {
            'status': 'active'
        }
    }, 
    {
        '$lookup': {
            'from': 'users', 
            'localField': 'bookingCreatorId', 
            'foreignField': '_id', 
            'as': 'bookingCreator'
        }
    },
    // 新增本段提取数组第一个元素
    {
        '$addFields': {
            'bookingCreator': { '$first': '$bookingCreator' }
            // 低于4.4版本的MongoDB可替换为下方写法:
            // 'bookingCreator': { '$arrayElemAt': [ '$bookingCreator', 0 ] }
        }
    },
    {
        '$project': {
            'resourceName': 1, 
            'duration': 1,
            'status': 1,
            'bookingCreatorId': 1, 
            'bookingCreatorDetails.firstName': '$bookingCreator.firstName', 
            'bookingCreatorDetails.lastName': '$bookingCreator.lastName'
        }
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:48:04