MongoDB aggregate: $lookup by _id, 然后获取第一个元素值
MongoDB aggregate: $lookup by _id, then get first element value
当我执行 $lookup
时,在我的例子中是 foreignField:"_id"
,我在数组中找到了找到的元素。这是 $lookup
从 users
集合中检索 fromUser
和 toUser
后输出的一份文档:
{
_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] }
}
...
当我执行 $lookup
时,在我的例子中是 foreignField:"_id"
,我在数组中找到了找到的元素。这是 $lookup
从 users
集合中检索 fromUser
和 toUser
后输出的一份文档:
{
_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] }
}
...