当我执行$lookup
时(在我的情况下是foreignField:"_id"
),我将在数组中找到找到的元素。这是完成$lookup
以便从fromUser
集合中检索toUser
和users
之后的输出文档:
{
_id : { from : 57b8da368e4a6e1f0043cb3d, to : 57c381af7008e51f009d92df },
fromUser : [
{
_id : 57b8da368e4a6e1f0043cb3d,
userName: "A"
}
],
toUser : [
{
_id : 57c381af7008e51f009d92df,
userName: "B"
}
]
}
如您所见,
fromUser
和toUser
是数组。如何投影fromUser
和toUser
,因此它们不包含数组而只包含用户的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/