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

