Warum sind meine Mongoose 3.8.7 schema Getter und setter ignoriert?
Während der Arbeit mit Node.js, Mongoose und MongoDB habe ich festgestellt, dass mein Mongoose schema get-und Set-Methoden werden nicht ausgelöst, wenn ich eine findOne-Abfrage.
Ich fand einen alten thread, die vermuten lässt, dass es gab ein Problem mit Getter und setter in der version 2.x, aber es besagt, dass es hat sich inzwischen geklärt und ich bin mit der neuesten version von Mongoose (3.8.7).
Hier ist ein Teil von meinem schema
function testGetter(value) {
return value + " test";
}
/**
* Schema
*/
var schema = new Schema({
username: { type: String, required: true, unique: true, get: testGetter }
});
//I have also tried this.
schema.path('username').get(function (value, schemaType) {
return value + " test";
});
Hier, wie ich die Abfrage ausführen
Model
.findOne(conditions, fields, options)
.populate(population)
.exec(function (error, doc) {
callback(doc, error);
});
Antwortet er mit einem Benutzernamen Wert, der fehlt die "test" - post-Korrektur. Mache ich etwas falsch hier? Jede Hilfe wäre sehr geschätzt werden!
Zusätzliche Informationen
Dies ist das Ergebnis der finden:
{
"username": "Radius"
}
Dies ist der Wert des Schemas.Pfade.Benutzername.Getter nach der Anwendung einer durch eine der beiden oben beschriebenen weisen:
[ [Function: testGetter] ]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem mit Getter nicht geändert wird, werden die gefundenen Dokumente bei der Abfrage mit Mungo. Um dies für jede Abfrage, die Sie dies tun können:
Sind Sie davon virtuals sind nicht arbeiten, weil Sie nicht zeigen, bis in Ihre Konsole.log-Ausgabe? Wenn ja, ist das by design. Virtuals sind außerhalb Ihrer eigentlichen Dokument so nicht bekommen, bedruckt mit Konsole.melden Sie standardmäßig. Um Sie anzuzeigen, Lesen Sie diese docs: http://mongoosejs.com/docs/api.html#document_Document-toObject
doc
zudoc.toObject({ getters: true, setters: true, virtuals: true })
und es funktioniert jetzt. Vielen Dank!Versuchen
als Ihre getter-Funktion,
this
ist die Entität, Instanz und dievalue
parameter bedeutet nicht viel, hier.Wenn Sie schreiben eine setter-Funktion, die Sie schreiben müssten
this.username = value
.schema.virtual('username').get(function () { ... });
und sogar versucht, erstellen Sie ein separates virtuellesschema.virtual('test')
mit "test" als Wert zurück, um zu sehen, wenn virtuals Arbeit für mich, aber ohne Erfolg.