2017-02-24 2 views
0

Ich versuche eine Aggregation mit MongoDB zu machen. Aber das funktioniert nur in Mongo Shell. Wenn ich mit Mungo versuche, gibt die Aggregation ein leeres Array zurück.Warum funktioniert diese Aggregation nicht mit Mongoose?

Diese Abfrage funktioniert auf MongoDB Shell

db.models.aggregate([ 
    { $match: {_id: modelId)} }, 
    { $project: {years: { $setUnion: [ "$modelYears.year"]}} } 
]) 

aber das gleiche in Mungo ein leeres Array zurück

Model.aggregate([ 
    {$match: {_id: modelId}}, 
    {$project: {years: { $setUnion: [ "$modelYears.year"]}}} 
    ], (err, model) => { 
    console.log('model', model); 
    }) 

Die Dokumentstruktur ist:

{ 
    "_id" : ObjectId("string"), 
    "name" : "Jhon", 
    "modelYears" : [ 
     { 
      "year" : 1989, 
      "spec" : [] 
     }, 
     { 
      "year" : 1988, 
      "spec" : [] 
     }, 
     { 
      "year" : 1987, 
      "spec" : [] 
     } 
    ], 
} 

Antwort

0

Ihre Nutzung von $setUnion ist nicht richtig und überflüssig. $setUnion benötigt zwei oder mehr Arrays.

Sie können so etwas verwenden.

db.models.aggregate([ 
{ $match: {_id: modelId)} }, 
{ $project: {years: "$modelYears.year"}} 
]) 

Auf einer Seite brauchen Sie nicht einmal Aggregation.

db.models.find({_id: modelId}, {"modelYears.year":1}) 
+0

Funktioniert nicht auch. Ich hatte dies zu tun: 'Model.findOne ({_ id: ModelID}) .select ({ 'modelYears.year': 1}) .exec ((err, Modell) => { var Jahre = _ .pluck (model.modelYears, 'year'); res.status (200) .json (years) }) ' –

+0

ah du hast Recht. Aktualisiert. Ich habe es mit Aggregation vermischt. – Veeram

+0

Diese Abfrage gibt ein Array von Jahren wie dem folgenden zurück: [{Jahr: 2014}, {Jahr: 2015}] ' , aber ich brauche etwas wie dieses:' [2014, 2015] '. Meine Abhilfe verwendete '_.pluck (model.modelYears, 'year');' –