3 votes

Le résultat de la requête Mongoose est-il en lecture seule ?

Comment puis-je modifier un objet retourné par une requête Mongoose ?

Supposons que nous ayons le schéma suivant :

var S = new mongoose.Schema( { 'name': String, 'field': String } );

Je fais la requête suivante et la modification du résultat :

var retrieve = function(name, callback) {
    S.findOne({ name: name }).exec(function (err, obj) {
      if (err) return handleError(err);
      obj['field'] = 'blah';
      callback(obj);
    });
}

En obj.field ne contiendra pas blah mais la valeur originale retournée par la requête, comme si elle était en lecture seule. Que se passe-t-il ?

Note : mon environnement est Node.js, Express, Mongoose et MongoDB.

3voto

Niall Paterson Points 3440

Note : Il s'agit d'une modification, ma réponse initiale était assez différente.

C'est un peu confus mais Mongoose renvoie des objets MongooseDocument et non des objets JSON simples. . Utilisez donc la méthode .lean() sur obj qui le transformera en JSON, et à partir de là, vous pourrez le modifier comme vous le souhaitez.

Avec les remerciements de Ze Jibe.

2voto

Pylinux Points 605

En doc retourné par la mangouste est en quelque sorte en lecture seule. Pour obtenir un objet accessible en écriture, vous devez exécuter :

var writeableObject = doc.toObject()
writeableObject['field'] = 'blah'
res.send(writeableObject)

Pour en savoir plus, allez à la section "Transformer" de la documentation de la mangouste : enlace

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X