MongoDB/Mongoose使聚合$lookup变为可选。

5

我有一个 MongoDB 查询

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

当applicant._id为空时,它将无法工作。这不是我想要的,如何使$lookup可选?

1个回答

14

$lookup 做外连接,如果没有匹配项不会过滤。

问题出在 $unwind 上,当数组为空或为 null 时,它会过滤掉。为了不过滤空数组,需要在 $unwind pipeline 中指定 preserveNullAndEmptyArrays : true

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

顺便问一下,为什么 $applicant 必须有 $ 前缀? - Jenny Mok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接