web-dev-qa-db-fra.com

Ajouter un champ non dans le schéma avec mangouste

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.

7
LuisEgan

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

6
Anthony Winzlet

Vous pouvez ajouter de nouveaux champs dans le schéma Utilisateur à l'aide de .add 

require('mongoose').model('User').schema.add({fullName: String});

Merci.-

0
Alvaro

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.

0
LuisEgan