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}, ...)