Mongoose сравнивает со значением вложенного поля третьего уровня

У меня есть следующие коллекции:

и я хотел бы сделать поиск от collection1 вплоть до коллекции 3 и 4, чтобы сравнить имя в одном запросе.

пример:

collection1.find({
    collection2.collection3.name: req.body.name3,
    collection2.collection4.name: req.body.name4
}).exec()

2 ответа

Решение

Вы должны использовать поиск, раскручивать и сопоставлять, вот непроверенное решение вашей проблемы

 Model.aggregate([
     {
         $match: {
             _id: req.parmas.id
         }
     },
        {
          $lookup: {
            from: "collection2",
            localField: "collection2",
            foreignField: "_id",
            as: "Collection2"
          }
        },
        {
            $unwind: "$ColelctionTwo"
        },
        {
          $lookup: {
            from: "collection3",
            localField: "CollectionTwo.collection3",
            foreignField: "_id",
            as: "Collection3"
          }
        },
        {
          $lookup: {
            from: "collection4",
            localField: "CollectionTwo.collection4",
            foreignField: "_id",
            as: "Collection4"
          }
        }
      ]).exec(function(err, result) {
          if(err) {
              // handle here
          }
          if(result) {
              // do something here...
          }
      }

Вы можете использовать этапы $lookup или $ graphlookup агрегированного фреймворка mongodb для запросов нескольких коллекций. Документы Mongoose для агрегации https://mongoosejs.com/docs/api.html Вы не можете выполнить простой запрос поиска для поиска в нескольких коллекциях.

Другие вопросы по тегам