2017-10-04 1 views
0

Kann jemand mir helfen, dieses Problem zu beheben, hier ist mein Code für Aggregat von Mungo:Aggregate sind keine Funktion - Mongoose NodeJS

export class GetVehiclesbyKotaCommandHandler { 
constructor(namaKota) { 
    return new Promise((resolve, reject) => { 
     VehiclesDB.find().populate({ 
      path: 'mitraId', 
      model: 'RentalDB', 
      select: 'namaKota' 
     }).aggregate([ 
      { 
       $match : { 
        namaKota:namaKota 
       } 
      } 
      ]).lean().then((dataVehicles)=>{ 
      if(dataVehicles !== null){ 
       resolve(dataVehicles); 
      } else { 
       reject (new NotFoundException('Couldn\'t find any Vehicles with namaKota' + namaKota)); 
      } 
     }).catch((errDataVehicles)=>{ 
      reject(new CanNotGetVehiclesException(errDataVehicles.message)); 
     }); 
    }); 
}} 

Und ich erhalte eine Fehlermeldung wie diese auf der Konsole:

TypeError: _VehiclesDB2.default.find(...).populate(...).aggregate is not a function 

getan, ich Danke für Hana :) Und ich meine mitraId Typ ObjectId mitraId ändern: { Typ: Schema.Types.ObjectId, erforderlich: true} ,

Antwort

0

Sie können $lookup in der Aggregationsanweisung anstelle von find und populate hier verwenden.

So:

VehiclesDB.aggregate([ 
    { 
     $lookup: { 
     from: 'RentalDB', 
     localField: 'mitraId', 
     foreignField: '_id', 
     as: 'mitra' 
     } 
    }, { 
     $unwind: "$mitra" 
    }, { 
     $match: { 
     "mitra.namaKota": namaKota 
     } 
    } 
    ]) 

Ich hoffe, das hilft.

+0

i mit ur Antwortcode zu verbessern, versuchen zu vermeiden, ist es Erfolg ist und nicht die Fehler, aber ich etwas Daten nicht erhalten in meiner Antwort –

+0

hier meine Exec === >>> .exec ((err, dataVehicles) => { if (err) ablehnen (new NotFoundException ('Konnte keine Fahrzeuge mit ID' + namaKota)); resolve (dataVehicles); }); –

+0

Hallo @GalangArbiS, könnten Sie ein Beispiel für Ihre Daten zu Ihrer Frage hinzufügen? :) –

0

Try Fund, bevölkert, schlanke Funktion hier und folgt wie unten

export class GetVehiclesbyKotaCommandHandler { 
constructor(namaKota) { 
    return new Promise((resolve, reject) => { 
     VehiclesDB.aggregate([ 
      { 
       $lookup: { 
       from: 'RentalDB', 
       localField: 'mitraId', 
       foreignField: '_id', 
       as: 'mitra' 
       } 
      }, { 
       $unwind: "$mitra" 
      }, { 
       $match: { 
       "mitra.namaKota": namaKota 
       } 
      } 
      ]).then((dataVehicles)=>{ 
      if(dataVehicles !== null){ 
       resolve(dataVehicles); 
      } else { 
       reject (new NotFoundException('Couldn\'t find any Vehicles with namaKota' + namaKota)); 
      } 
     }).catch((errDataVehicles)=>{ 
      reject(new CanNotGetVehiclesException(errDataVehicles.message)); 
     }); 
    }); 
}}