Node.js mongodb-$lookup和$if运算符
我正在建设一个辅助项目。如果某些条件匹配,我想使用嵌套的$lookup和$unwind。我在下面创建了一个简单的原型。有些用户有数字,有些没有数字。如果数字不是null或未定义,我想加入 这是密码-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",
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
}
}