J'essaie d'ajouter un nouveau champ à un document, mais cela ne fonctionne pas:
Création de mon prototype UserModel:
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);
}
});
};
Puis en l'appelant
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);
...
}
);
Ceci met à jour avec succès n'importe quel champ tant qu'il existe, mais n'en ajoute aucun nouveau.
Vous pouvez ajouter et supprimer des champs dans le schéma en utilisant l'option { strict: false }
option: strict
L'option strict (activée par défaut) garantit la transmission des valeurs à nos constructeurs de modèles non spécifiés dans notre schéma ne reçoivent pas sauvé à la db.
var thingSchema = new Schema({..}, { strict: false });
Et aussi vous pouvez le faire dans la requête de mise à jour aussi bien
Model.findOneAndUpdate(
query, //filter
update, //data to update
{ //options
returnNewDocument: true,
new: true,
strict: false
}
)
Vous pouvez consulter les documentations ici
Vous pouvez ajouter de nouveaux champs dans le schéma Utilisateur à l'aide de .add
require('mongoose').model('User').schema.add({fullName: String});
Merci.-
Citant JonathanLonowski
L'ODM est conçu pour appliquer le schéma que vous avez défini, en vérifiant que chaque propriété appartient et en supprimant celles qui ne le sont pas.
Donc, pour mettre à jour les champs en utilisant mongoose
, le champ doit exister dans le schéma du modèle.