Nodejs / MongoDB: $ dans un tableau des besoins

voix
0

ce que je suis en train de faire, est de joindre deux collections puis retourner les éléments whome noms existent dans un tableau

ce sont les modèles

Modèle de voiture

id,
carAuthorizedDrivers:[String],
garageId:{type: Schema.ObjectId,ref:garage}

driversModel

id,
garageId:{type: Schema.ObjectId,ref:garage}
drivers:[{name:String,skill:String}]

c'est le résultat de la jointure

id:1D99399379773,
carAuthorizedDrivers:[DriverA,DriverB],
garageId:010003,
JoinDrivers:[drivers:[{name:DriverA,skill:89},{name:DriverB,skill:77},{name:DriverC,skill:45}]]

Je veux limiter Joindrivers dans le but de ne montrer pilotes (nom + compétences) whome noms appartiennent à carAuthorizedDrivers, donc je veux joinDrivers pour ne contenir que ce qui suit:

{name:DriverA,skill:89},{name:DriverB,skill:77}

ce que j'ai essayé de le faire est le suivant:

join () {
    return new Promise(function (resolve, reject) {
      Car.aggregate([
        {
          $lookup: {
            from: 'drivers', // collection name in db
            localField: 'garage_id',
            foreignField: 'garage_id',
            as: 'joinDrivers'
          }
        },
        { $unwind: '$Joindrivers' },
        { $unwind: '$Joindrivers.drivers' },
        { $unwind: '$carAuthorizedDrivers' },
        { $match: { 'Joindrivers.drivers.name': { $in: 'carAuthorizedDrivers' } } }
      ]).exec((err, result) => {
        if (err) {
          reject(err)
        }
        resolve(result)
      })
    })
  }

Je reçois $ en a besoin d' une erreur de tableau , mais si je mets un tableau manuellement comme ceci:

$match: { 'Joindrivers.drivers.name': { $in: [DriverA,DriverB] } }  

$ En fonctionne bien et je reçois le résultat, comment puis-je résoudre ce problème?

Créé 19/03/2020 à 22:05
source utilisateur
Dans d'autres langues...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more