mongodb/mongoose 将聚合 $lookup 设为可选

Jen*_*Mok 3 mongoose mongodb node.js express

我有 mongodb 的这个查询

Job.aggregate([ 
       {$match: {created_by: req.params.userId }},
       {$lookup: {
       from: "users", 
       localField: "applicant._id", 
       foreignField: "_id", 
       as: "applicant" }},
       {$unwind: '$applicant'}
     ])
Run Code Online (Sandbox Code Playgroud)

当申请人._id 为空时,它不起作用。那不是我想要的,如何将 $lookup 设为可选?

Sar*_*ana 9

$lookup 执行外连接,如果没有匹配,它不会过滤。

问题在于$unwind,它会在数组为空或为空时进行过滤,为了不过滤您需要preserveNullAndEmptyArrays : true$unwind管道中指定的空数组

Job.aggregate([ 
       {$match: {created_by: req.params.userId }},
       {$lookup: {
           from: "users", 
           localField: "applicant._id", 
           foreignField: "_id", 
           as: "applicant" }
       },
       {$unwind: {
           path :'$applicant', 
           preserveNullAndEmptyArrays: true}
       }
     ])
Run Code Online (Sandbox Code Playgroud)