Lorsque j'essaie de modifier une partie des données renvoyées par une requête Mongoose, cela n'a aucun effet.
J'essayais de comprendre cela pendant environ 2 heures hier, avec toutes sortes de _.clone()
s, en utilisant des variables de stockage temporaires, etc. Enfin, juste au moment où je pensais devenir fou, j'ai trouvé une solution. J'ai donc pensé que quelqu'un dans le futur (fyuuuture!) Pourrait avoir le problème de sauvegarde.
Survey.findById(req.params.id, function(err, data){
var len = data.survey_questions.length;
var counter = 0;
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q; //has no effect
if(++counter == len) {
res.send(data);
}
});
});
});
Réponses:
Pour des cas comme celui-ci où vous voulez un objet JS simple au lieu d'une instance de modèle complète, vous pouvez appeler
lean()
la chaîne de requête comme suit:Cette manière
data
est déjà un objet JS simple que vous pouvez manipuler selon vos besoins.la source
aggregate
fournit toujours ses résultats sous forme d'objets simples, il n'est donc pas nécessaire d'utiliserlean()
.Je pense que la documentation Mongoose ne le clarifie pas assez, mais les données renvoyées dans la requête (bien que vous puissiez res.send () it) sont en fait un objet Mongoose Document, et PAS un objet JSON. Mais vous pouvez résoudre ce problème avec une seule ligne ...
la source
toObject()
, qui fait la même chose quetoJSON()
mais avec un nom moins déroutant.TypeError: data.toObject is not a function
J'ai eu ça, même avectoJSON
result
, j'ai pu modifierresult._doc
.JSON.parse(JSON.stringify(data))
place pour les tableaux d'objets