Mongoose upsert erstellt keine Standardschemaeigenschaft

7

Beispieldokumentschema:

%Vor%

Ich verwende einen allgemeinen Anforderungshandler zum Bearbeiten und Erstellen von "Firmen" -Dokumenten:

%Vor%

Bei Verwendung dieser Methode werden jedoch beim Einfügen eines neuen Dokuments die Eigenschaften created , modified nicht mit den Standardwerten Date.now gespeichert. Jetzt kann ich Company.create abhängig von der Existenz einer ID aufrufen, aber ich frage mich, warum Upsert keine Standardwerte verwendet, wenn eine Eigenschaft in einem neuen Dokument nicht existiert?

Ich benutze Mungo Version ~ 3.8.10,

    
strada 10.09.2014, 00:25
quelle

2 Antworten

21

Was passiert, ist, dass keine der Validierungs-, Middleware- oder Standardwerte von Mongoose verwendet wird, wenn eine der "update" -Familien von Methoden aufgerufen wird, wie zum Beispiel findByIdAndUpdate . Sie werden nur durch Aufrufe von save oder create aufgerufen.

Der Grund dafür ist, dass die "update" -Aufrufe effektiv Pass-Throughs an den nativen Treiber sind, wobei Mungo nur die Typisierung der Felder basierend auf der Schemadefinition durchführt.

Mongoose 4.0 Update

Mongoose unterstützt jetzt das Setzen von Standardwerten, wenn ein neues Dokument während eines update , findOneAndUpdate oder findByIdAndUpdate upsert erstellt wird. Setzen Sie die Option setDefaultsOnInsert auf true , um dies zu aktivieren. Dies verwendet den Operator $setOnInsert , um die Standardwerte beim Einfügen zu erstellen.

%Vor%     
JohnnyHK 10.09.2014 14:15
quelle
7

Sie können { "$setOnInsert": { value: 31 } } verwenden Doc

Hinweis: Ссылка

Syntax: findOneAndUpdate([query], [doc], [options], [callback]) Dokument

Beispiel:

%Vor%     
Saravanan Rajaraman 24.11.2014 04:42
quelle

Tags und Links