Mongoose сравнивает со значением вложенного поля третьего уровня - PullRequest
0 голосов
/ 09 февраля 2019

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

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

пример:

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

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вам необходимо использовать lookup , unwind и match , вот непроверенное решение вашей проблемы

 Model.aggregate([
     {
         $match: {
             _id: req.params.id
             // for object id use
             // _id: mongoose.Types.ObjectId(req.params.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...
          }
      }
0 голосов
/ 11 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...