如何在 MongoDB 的 $lookup 中返回单个对象而不是数组?

Sha*_*Roy 5 mongodb aggregation-framework

当我们$lookupMongoDB聚合查询使用时,我们使用这种格式

{
   $lookup:
     {
       from: "users",
       localField: "userId",
       foreignField: "_id",
       as: "user"
     }
}
Run Code Online (Sandbox Code Playgroud)

其中user作为对象数组返回,然后我们需要$arrayElemAt$project舞台上使用一段时间以作为单个对象返回。喜欢

{
  $project:
   {
    user:
      { 
        $arrayElemAt: [ "$user", 0 ] 
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我们如何可以返回user单个对象,而不是阵列$lookup阶段?

arg*_*g20 11

您还不能这样做$lookup,最干净的方法是随后添加一个新阶段,如下所示:

{
  $unwind: "$user"
}
Run Code Online (Sandbox Code Playgroud)

由于每个文档只有一个用户,因此您最终会得到相同的集合,但这次用户不再是数组。如果每个文档有多个用户(例如 2 个),那么您最终会得到 2 个文档,每个文档对应一个用户。