MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Der Standardwert wurde nicht festgelegt, während Update with Upsert als true verwendet wurde

Zum Hinzufügen von Standardwerten zu Ihrem Dokument, wenn es mit findOneAndUpdate erstellt wurde (vor der Abfrage existierte es nicht) und Sie das Feld in der Aktualisierung nicht angegeben haben, sollten Sie setDefaultsOnInsert .

Beim upsert und setDefaultsOnInsert sind beide true , werden die Standardwerte festgelegt, wenn der Datensatz nicht gefunden und ein neuer erstellt wird. Dadurch wird der Workflow übersprungen, bei dem überprüft werden muss, ob der Datensatz vorhanden ist, und wenn nicht, ein neuer Datensatz mit „Speichern“ erstellt wird, nur um sicherzustellen, dass die Standardwerte festgelegt sind .

Ich hatte das gleiche Problem (Datensatz erstellt mit findOneAndUpdate mit upsert: true ) und der Standardwert für ein Feld wurde dem Datensatz nicht hinzugefügt, obwohl er im Schema enthalten war. Dies bezieht sich nur auf das Hinzufügen von Standardwerten bei Verwendung von findOneAndUpdate um Dokumente zu erstellen, nicht um die Aktualisierung des 'erstellt'-Feldes zu überspringen.

zB

User.findOneAndUpdate({email: user.email}, user, {upsert: true, setDefaultsOnInsert:true}, ...)