Mongoose: Lean zum Sparen nutzen?

Erstellt am 3. Okt. 2013  ·  16Kommentare  ·  Quelle: Automattic/mongoose

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?

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:

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);
});

Alle 16 Kommentare

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 :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen