как использовать пусть в $ lookup агрегации Mongodb - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь запросить некоторые данные, используя агрегацию, но что-то не работает ...

Я искал несколько примеров, и это то, что у меня есть ...

(Из моего веб-приложения я просто получаю searchTerm)

 productosModel.aggregate([
        //IN THE FIRST STAGE I FILTER BY REF OR NAME ( searchTerm )
        {
            $match: {
                $or: [
                    { ref: { '$regex': req.body.ref, '$options': 'i' } },
                    { nombre: { '$regex': req.body.nombre, '$options': 'i' } }
                ]
            }
        },
        {
            $lookup: {
                from: "configtarifas",
                let: { "producto": "$_id" }, //HERE IS WHERE I PRETEND TO DEFINE THE _ID FILTERED 
                pipeline: [
                    {
                        $match: {
                            $expr: { $eq: ['$idProducto',  "$$producto" ] },
                        }
                    }
                ],
                as: "configs",
            }
        }
    ])

Затем мне нужно использовать $ lookup, чтобы присоединиться к этой коллекции и добавить configTarifas к данным, но я хотел бы получить только документы что соответствует _id продукта, отфильтрованного ранее ...

что я делаю не так? коллекция config не соответствует ни одному $$ producto ... похоже, что $$ producto не получает значение _id

1 Ответ

2 голосов
/ 31 марта 2020

У вас несоответствующие типы между родительским полем $_id (ObjectId) и idProducto (String). Вам необходимо конвертировать ObjectId в String с $ toString или $ convert operator

{
  $lookup: {
    from: "configtarifas",
    let: { "producto": {$toString: "$_id"} },
    pipeline: [
      {
        $match: {
          $expr: { $eq: ['$idProducto',  "$$producto" ] },
        }
      }
    ],
    as: "configs",
  }
}
...