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?
warum brauchen Sie '_POST: this'? Die Aggregationspipeline arbeitet sequenziell. '$ group' arbeitet mit einem Cursor nach vorheriger Abfrage (falls vorhanden). –
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