我有下面的代码。
Users.aggregate([{
$lookup: {
from: "payments",
// localField:"_id",
// foreignField:"restaurant_id",
let: {
id: "$_id"
},
pipeline: [
{
$match: {
status: "Active", // If I add only this line it returns the result ->
restaurant_id:"$id" //or "$_id" ->but after adding this line it return empty array
//if I change $id to static value of id result comes
},
}
],
as: "subscription"
}
}])
我无法在
$match
中使用字段名称。如果我正在编写静态ID,则可以正常工作,但是我需要使用动态_id
。请建议我如何使用$match
中的字段名称。我已经使用了许多类似$and
$expr
的方法,但是没有任何效果。两个集合都在同一个数据库中
MongoDB服务器版本:3.6.9
“猫鼬”:“ ^ 5.3.4”
最佳答案
我已经从参考文献Specify Multiple Join Conditions with $lookup解决了该问题
Users.aggregate([
{
$lookup: {
from: "payments",
// localField:"_id",
// foreignField:"restaurant_id",
let: {
id: "$_id" //localField
},
pipeline: [
{
$match: {
$expr:{
$and:[
{$eq: ["$status","Active"]},
{
$eq:[
"$$id", //localField variable it can be used only in $expr
"$restaurant_id" //foreignField
]
}
]
}
},
}
],
as: "subscription"
}
}
])