2017-05-08 15 views
0

ich ein Mungo-Schema haben, die wie folgt aussieht:Mongoose Feld zurückgesetzt

var mongoose = require('mongoose'); 
var _ = require('lodash'); 
var Schema = mongoose.Schema; 


var shopSchema = new mongoose.Schema({ 

    name: {type: String, trim: true}, 
    description: {type: String, trim: true}, 
    rating: Number, 
    ratingsData: [{type: Number}] 

}); 

shopSchema.methods.rate = function(rating){ 
    this.ratingsData.push(rating); 
    this.rating = _.mean(this.ratingsData); 
    return this.ratingsData; 
} 

module.exports = mongoose.model('Shop', shopSchema); 

Die Rate Methode soll einen Wert an die ratingsData Feld übergeben anhängen und dann den Mittelwert des Arrays zurück. Das Problem, das ich habe, ist, dass jedes Mal, wenn die Methode aufgerufen wird, this.ratingsData nur ein leeres Array ist. Die vorherigen Werte werden aus irgendeinem Grund nicht gespeichert. Daher ist der Durchschnitt, den ich bekomme, immer die Bewertung, die an die Methode weitergegeben wird.

Was mache ich falsch?

+0

Wenn Sie entweder versuchen, Daten in die Datenbank einfügen tun Einfügen oder Speichern in der Datenbank. Vor dem Ereignis versuchen, Daten abzurufen und Mittelwerte zu berechnen. Ich sehe keine Speicherfunktion. –

+0

Sie können Operationen ausführen, nachdem Sie Wert in die db eingefügt haben. Ich kann nicht verstehen, wie Sie versuchen, beide Dinge gleichzeitig zu erreichen. –

Antwort

1

Sie haben einfach nicht das Schema-Objekt speichern, müssen Sie etwas wie folgt aus:

shopSchema.methods.rate = function(rating, clb){ 
    this.ratingsData.push(rating); 
    this.rating = _.mean(this.ratingsData); 

    this.save(function(err, result){ 
     if(err) throw err; 
     return clb(result.ratingsData); 
    }) 
}; 

oder wenn Sie das Versprechen:

shopSchema.methods.rate = function(rating){ 
    this.ratingsData.push(rating); 
    this.rating = _.mean(this.ratingsData); 

    return this.save() 
    .then(result=>{ 
     return result.ratingsData 
    }) 
    .catch(err=>{ 
     throw err; 
    }) 
}; 
+0

Das passiert, wenn ich versuche, um 4 Uhr morgens zu kodieren. Ich vermisse solche Dinge. Danke trotzdem. – ninesalt

Verwandte Themen