как получить доступ к имени поля в mongoose $ aggregate -> $ lookup-> pipe -> $ match - PullRequest
1 голос
/ 26 июня 2019

У меня есть код ниже.

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. Подскажите, пожалуйста, как я могу использовать имя поля в $match. Я использовал много вещей, как $and $expr, но ничего не получалось.

обе коллекции находятся в одном БД

Версия сервера MongoDB: 3.6.9

"Мангуст": "^ 5.3.4"

1 Ответ

1 голос
/ 26 июня 2019

Я решил проблему по этой ссылке Укажите несколько условий соединения с $ 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"
          }
     }
])
...