12

当我这样做时$lookup,在我的情况下foreignField:"_id",我会在数组中找到找到的元素。$lookup这是完成检索fromUsertoUserusers集合中检索后输出中的一个文档:

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

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

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

1 回答 1

37

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

// your previous stages incl. lookup
...
$project: {
    fromUser: { $arrayElemAt: ["$fromUser.userName", 0] },
    toUser: { $arrayElemAt: ["$toUser.userName", 0] }
}
...
于 2016-08-30T04:01:32.003 回答