Node.js mongodb-$lookup和$if运算符

Node.js mongodb-$lookup和$if运算符,node.js,mongodb,nosql,aggregation-framework,aggregation,Node.js,Mongodb,Nosql,Aggregation Framework,Aggregation,我正在建设一个辅助项目。如果某些条件匹配,我想使用嵌套的$lookup和$unwind。我在下面创建了一个简单的原型。有些用户有数字,有些没有数字。如果数字不是null或未定义,我想加入 这是密码- users.aggregate([ { $lookup: "number", localField:"user.number", foreignField:"name",

我正在建设一个辅助项目。如果某些条件匹配,我想使用嵌套的$lookup和$unwind。我在下面创建了一个简单的原型。有些用户有数字,有些没有数字。如果数字不是null或未定义,我想加入

这是密码-

users.aggregate([



{
     
        $lookup: "number",
        localField:"user.number",
        foreignField:"name",
        as:"number"
     
   }
    {
                $unwind: {
                    path: "$number",
                    preserveNullAndEmptyArrays: true
                }
    }
    ,
   {
     
        $lookup: "countries",
        localField:"number.countrycode",
        foreignField:"name",
        as:"countries"
     
   },

   {

      $unwind:"countries",
      //preserveNullAndEmptyArrays

   },
   $project:{

       name:1,
       number:"$number.phoneNumber",
       countryCode:"$countries.countryCode"


    }
 ])
输出:

[{

name:"yashraj basan"
number:"123345677",
countryCode:"US"
},
{

name:"krutik basan"
number:"123345679",
countryCode:"FR"
}]
现在我得到所有有号码的用户,但我想要有号码和没有号码的用户

预期产出:

[{
    
    name:"yashraj basan"
    number:"123345677",
    countryCode:"US"
    },
    {
    
    name:"krutik basan"
    number:"123345679",
    countryCode:"FR"
    },
    {
      name:"dhruvam basan",
      number:"",
      countrycode:""
    },{
     name:"foo bar",
number:"",
countrycode:""
    }]

我感谢你的所有意见。谢谢

无需有条件地运行
$lookup
。您可以为每个用户执行此操作,但当您使用
$unwind
时,您可以利用以下选项:


你能展示一些数据和预期结果吗?@micki更新了问题。看一看,您正在运行
$lookup
,它工作正常,但是您想使用
$unwind
,并且由于缺少
国家/地区而丢失了一些文档,对吗?对。我想要有号码的用户和没有号码的用户have@micki谢谢你的意见。我尝试了该解决方案,但每当我将PreserveNullandEmptyArray设置为true时,它都会返回错误“参数必须是聚合管道运算符”。@Yashrajbasan您能编辑您的问题并显示代码吗?似乎对这两个
$unwind
都很容易,您需要使用对象(
{path:,preserve…:}
)语法,并且它应该是有效的。您可以与文档进行比较
{
    $lookup: {
        from:"countries",
        localField:"user.number.countrycode",
        foreignField:"name",
        as:"countries"
    }
},
{
    $unwind: {
        path: "countries",
        preserveNullAndEmptyArrays: true
    }
}