Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js mongodb/mongoose将聚合$lookup设置为可选_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js mongodb/mongoose将聚合$lookup设置为可选

Node.js mongodb/mongoose将聚合$lookup设置为可选,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有一个关于mongodb的问题 Job.aggregate([ {$match: {created_by: req.params.userId }}, {$lookup: { from: "users", localField: "applicant._id", foreignField: "_id", as: "applicant" }}, {$unwind: '$applicant'}

我有一个关于mongodb的问题

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

当申请人id为空时,它将不起作用。这不是我想要的,如何使$lookup成为可选的?

$lookup
执行外部联接,如果没有匹配项,它将不会过滤

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

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

顺便问一下,为什么$applicator必须有$prefix?