Ich möchte die schlanke Option zum Speichern verwenden.
Der Callback von save gibt auch ein Mungodokument zurück und kein JS-Objekt, das ich mit einem schlanken Aufruf ändern möchte.
Die Verwendung von Lean für Abfragen und toObject in den Callback-Funktionen von Saves scheint mir eine Verwirrung zu sein.
Irgendwelche Ideen?
Wenn Sie kein Lean verwenden möchten, ist es am besten, ein neues Objekt aus dem zurückgegebenen Mongoose-Objekt zu bilden
Person.findOne({
_id: req.user.id
}, function(err, result) {
if (err)
return next(err);
return (200, {
id: result._id,
spouse: result.spouse,
children: result.children
});
});
Vielleicht war mein Beitrag nicht klar, sorry.
Ich möchte das schlanke aber auch auf Sparbetrieb nutzen.
Die Callbacks der Sicherungsfunktionen wie "save" oder "update" kehren mit Schema-Objekt zurück und ich kann Lean nicht verwenden, um ein reines JS-Objekt zu haben.
Das ist mein Problem. Ich möchte Lean auch zum Speichern und Aktualisieren verwenden.
@imrefazekas , Save, Update, Create und Remove sind keine "Abfragen", also nehmen sie die .lean()
Direktive nicht so an, wie sie ist.
Sie können die Methode .toObject()
für das zurückgegebene Objekt verwenden, um es ohne das Schema abzurufen:
p.save(function (err, returned) {
var leanObject = returned.toObject(); // has many options: http://mongoosejs.com/docs/api.html#document_Document-toObject
assert.equal(leanObject.schema, null);
});
hummity brummt... save()
sollte eine magere Option haben?
Wie würden Sie sich die Zusammenarbeit von save() und Lean vorstellen? AFAIK, das macht keinen Sinn.
ähm, ist schon ein paar Tage her aber momentan ist es so
user.save(function(err,user){
//user is full-fledged etc
});
mit schlanker Option wäre/könnte es sein
user.save({
lean:true
},function(err,user){
//user is *not* full-fledged etc
});
stimmt das nicht?
@ORESoftware nein, denn der zweite Parameter im zu speichernden Rückruf ist genau das gleiche Dokument. Mongoose fragt die Datenbank nicht nach dem neu aktualisierten Dokument. Zum Beispiel,
user.save(function(err, _user){
user === _user; // true
});
oh ok verstanden :) mein schlecht
fürs Protokoll, die oben von @refack bereitgestellte Lösung funktioniert 2017
@peterpeterparker Ich bin anderer Meinung und denke, dass dies immer noch ein Problem für Benutzer ist, die möchten, dass Daten von allen Datenbankvorgängen anstelle von Mongoose-Instanzen zurückgegeben werden.
@alex-dixon Ich habe gerade darauf hingewiesen, dass die Lösung von @refack für die Operation save
2017 noch gültig und funktionsfähig ist, nicht mehr und nicht weniger ;)
@peterpeterparker Du hast recht. Es tut uns leid. Hätte das nicht an dich richten sollen.
@alex-dixon keine sorge
sollten wir lean()
mit Model.create()
?
Niemals, weil du lean()
mit Model.create()
kannst :p
Ich habs :)
Hilfreichster Kommentar
@imrefazekas , Save, Update, Create und Remove sind keine "Abfragen", also nehmen sie die
.lean()
Direktive nicht so an, wie sie ist.Sie können die Methode
.toObject()
für das zurückgegebene Objekt verwenden, um es ohne das Schema abzurufen: