MongoDB aggregate: $lookup by _id, 然后获取第一个元素值

MongoDB aggregate: $lookup by _id, then get first element value

当我执行 $lookup 时,在我的例子中是 foreignField:"_id",我在数组中找到了找到的元素。这是 $lookupusers 集合中检索 fromUsertoUser 后输出的一份文档:

{ 
    _id : { from : 57b8da368e4a6e1f0043cb3d, to : 57c381af7008e51f009d92df }, 
    fromUser : [
        {
            _id : 57b8da368e4a6e1f0043cb3d, 
            userName: "A"
        }
    ], 
    toUser : [
        {
            _id : 57c381af7008e51f009d92df, 
            userName: "B"
        }
    ]
}

如您所见,fromUsertoUser 是数组。如何投影 fromUsertoUser 以便它们只包含用户的 userName 而不是数组,如下所示:

{
    _id : { from : 57b8da368e4a6e1f0043cb3d, to : 57c381af7008e51f009d92df },
    fromUser: "A",
    toUser: "B"
}

您可以通过使用 $arrayElemAt 运算符将 $project 阶段附加到您的聚合管道来实现这一点

// your previous stages incl. lookup
...
$project: {
    fromUser: { $arrayElemAt: ["$fromUser.userName", 0] },
    toUser: { $arrayElemAt: ["$toUser.userName", 0] }
}
...