2017-06-27 4 views
0

Ich möchte einige Felder in meinen Dokumenten als Kleinbuchstaben speichern. So ich ein Schema wieMongoose Kleinbuchstaben Flag wird ignoriert, während findOneAndUpdate()

let body = new Schema({ 
    id: { type: Number, unique: true }, 
    group_name: { type: String, lowercase: true }, 
    type_name: { type: String, lowercase: true }, 
    full_spectral_class: { type: String, lowercase: true }, 
    spectral_class: { type: String, lowercase: true }, 
    spectral_sub_class: { type: String, lowercase: true }, 
    luminosity_class: { type: String, lowercase: true }, 
    luminosity_sub_class: { type: String, lowercase: true } 
}) 

erstellt Wenn ich save() verwende Werte einfügen, werden alle Werte als Klein Strings gespeichert zu werden. Aber wenn ich versuchte, mit findOneAndUpdate() zu aktualisieren, werden die Werte erhalten, wie es ist. Ich möchte lieber nicht alle Felder manuell in Kleinbuchstaben konvertieren, da es eine ganze Reihe von Feldern und Schemata gibt, die demselben Stil folgen.

+2

Sie müssen wahrscheinlich ['runSettersOnQuery' auf' true' setzen, wenn Sie die Abfrage ausführen (http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate). – str

+0

Das hat irgendwie funktioniert. Die Verwendung von 'runSettersOnQuery: true' in' schema.findOneAndUpdate (query, config) 'hat nicht funktioniert. Ich musste es als eine Option verwenden, während ich das Schema als [hier] definierte (http://mongoosejs.com/docs/queries.html). –

Antwort

2

Sie müssen runSettersOnQuery auf true setzen.

const options = { upsert: true, runSettersOnQuery : true }; 
await yourModel.findOneAndUpdate(searchCriteria, newSetOfValues, options); 

Es gibt nur wenige Proben im Internet, aber vielleicht können Sie dies eine nützliche von mongoose docs finden.

Verwandte Themen