2016-04-22 17 views
0

Ich versuche, Kommentare aus einer MongoDB-Sammlung zu erhalten (mit Mongoose) und berechne die Anzahl der Kommentare und den Durchschnitt mithilfe der Aggregat-Pipeline. Wenn das erste $ -Match jedoch nichts zurückgibt, stürzt das Skript mit der Eigenschaft 'Kann nicht lesen' ab 'undefined' Fehler.MongoDB/Mongoose-Aggregat, Bühnenergebnis undefined

var q = Comment.aggregate([ 
    { $match: { 
     _post: this, 
     rating: { $gt: 0 }, 
    }}, 
    { $group: { 
     _id: null, 
     avg: { $avg: "$rating" }, 
     count: { $sum: 1 } 
    }} 
]); 

q.exec(function(err, result) { 
    cb(err, result[0].avg, result[0].count); 
}); 

Als ich das $ _POST Spiel auslassen das Ergebnis der korrekten statistischen Mittel und Anzahl aller Kommentare, aber wenn $ Spiel nichts zurückliefert, es wirft einfach einen Fehler .. Wie zu beheben?

+0

warum brauchen Sie '_POST: this'? Die Aggregationspipeline arbeitet sequenziell. '$ group' arbeitet mit einem Cursor nach vorheriger Abfrage (falls vorhanden). –

+0

Das Code-Snippet ist Teil einer Instanzmethode eines Post-Mongoose-Objekts. Der _post: bezieht sich auf das Objekt selbst, um nur Kommentare zu diesem bestimmten Beitrag zu erhalten. $ group funktioniert in der Tat nach einem leeren Ergebnis aus der vorherigen Phase, aber ich habe gerade auf den falschen Platz geschaut (siehe Antwort unten). – Keugels

Antwort

0

Ich schaute auf den falschen Platz. Die Fehlermeldung bezieht sich nicht auf die 'avg' in der Abfrage, sondern auf die result.avg in der Callback-Funktion. Kurz vor dem Posten hatte ich die Callback-Funktion Parameter geändert, um [0] .avg, und jetzt die Fehlermeldung war nicht in der Lage, "0" von undefiniert zu lesen.

Staring mich blinder an der falschen Stelle .. Posted einfach zu früh ..