2017-05-08 1 views
0

Ich habe ein Mungo-Dokument, und ich möchte viele Felder darauf mit einem anderen Objekt aktualisieren. so etwas wieMongoose - Dokument speichern Object.assign

Model.findById(_id, function (err, doc){ 
    var updateData = {...data} 

    // i do not want to do 
    doc.foo = data.foo; 
    doc.bar = data.bar; 

    // i need something like 
    doc.save(updateData) 
    // or 
    doc.update(updateData) 
    // or 
    doc = {...doc, ...updateData} 
    doc.save(); 

}); 

die update ist ein Objekt mit allen Daten i im doc aktualisieren müssen.

keine doc Zusammenhang gefunden haben, war in der Nähe eine und Update finden ...

Antwort

2

Angenommen, Ihre data Objekt alle Schlüssel hat Sie auf dem Dokument aktualisieren möchten, warum Sie nicht versuchen, mit Object.assign, wie Sie in den Titel Ihrer Frage erwähnen:

Object.assign(doc, data); 
doc.save(callback); // save is async 

Oder Sie können Mongo verwenden .findByIAndUpdate() wie so:

Model.findByIdAndUpdate(id, { $set: data }, callback) 

In beiden Fällen können Sie verhindern, dass Sie jede Eigenschaft, die Sie aktualisieren möchten, manuell festlegen.

+0

aktualisieren, aber ich habe Angst, die 'Object.assign' außer Kraft setzen kann, die Setter/Getter oder alle wichtigen Eigenschaften des Mungo-Objekt. Das wird passieren? –

+0

Ich denke, Sie sollten in Ordnung sein für die 'Object.assign' [Dokumentation] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign). 'Object.assign' verwendet' get' auf der Quelle und 'set' auf dem Ziel (in diesem Fall Ihr Dokument), also weist es ** Eigenschaften zu, die nur kopiert werden, also sollte es sich an alle vordefinierten Getter halten/Setzer – Ian

+0

Großartig! Ich dachte im Gebrauch Spread-Operator, etwas wie '{..doc, ... data}', aber dies wird ein anderes Objekt erstellen und das Mungo-Dokument nicht behalten. –

0

versuchen diese

//

router.put("/updatestudent/:id", function(req, res) { 
    var id = req.params.id; 
    var obj = req.body; 
    student.findByIdAndUpdate(id, { name: obj.name, emailid: obj.emailid }, 
     function(err) { 
      if (err) { 
       return res.send('error updated student'); 
      } 
      res.send("updated"); 
     }); 
}); 
+0

Sorry, aber ich muss mit dem aktuellen Objekt arbeiten, ich versuche, das Element nicht erneut zu suchen –

Verwandte Themen