Ich versuche, einem Dokument ein neues Feld hinzuzufügen, aber das funktioniert nicht:
Erstellen eines UserModel-Prototyps:
model = require("../models/user")
UserModel.prototype.findOneAndUpdate = function(query, params, cb) {
model.findOneAndUpdate(query, params, { returnNewDocument: true, new: true }, function(err, data) {
if (!err) {
cb(false, data);
} else {
cb(err, false);
}
});
};
Dann rufe ich es an
userFunc = require("../../model_functions/user")
userFunc.findOneAndUpdate({
"email.value": userEmail
}, {
$set: {"wat":"tf"}
},
function (err, updatedUser) {
//This logs the updated user just fine, but the new field
is missing
console.log(updatedUser);
...
}
);
Dies aktualisiert jedes Feld erfolgreich, solange es existiert, aber es wird kein neues hinzugefügt.
Sie können Felder im Schema mit der Option { strict: false }
hinzufügen und entfernen.
option: streng
Die Option strict (standardmäßig aktiviert) stellt sicher, dass Werte an .__ übergeben werden. Unser Modellkonstruktor, der nicht in unserem Schema angegeben wurde, erhält nicht in der DB gespeichert.
var thingSchema = new Schema({..}, { strict: false });
Sie können dies auch in der Aktualisierungsabfrage tun
Model.findOneAndUpdate(
query, //filter
update, //data to update
{ //options
returnNewDocument: true,
new: true,
strict: false
}
)
Sie können die Dokumentationen überprüfen hier
Sie können neue Felder im Schema User mit .add hinzufügen
require('mongoose').model('User').schema.add({fullName: String});
Vielen Dank.-
Zitieren JonathanLonowski
Das ODM wurde entwickelt, um das von Ihnen definierte Schema zu erzwingen, um zu überprüfen, ob jede Eigenschaft gehört, und die anderen zu verwerfen.
Um Felder mit mongoose
zu aktualisieren, muss das Feld im Modellschema vorhanden sein.