当我执行$lookup时(在我的情况下是foreignField:"_id"),我将在数组中找到找到的元素。这是完成$lookup以便从fromUser集合中检索toUserusers之后的输出文档:

{
    _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] }
}
...

关于MongoDB聚合: $lookup by _id,然后获取第一个元素值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39216173/

10-12 06:48