Pourquoi ne pouvez-vous pas modifier les données renvoyées par une Mangouste Requête (ex: findById)
Quand j'ai essayer de modifier tout ou partie des données renvoyées par une Mangouste Requête, qu'il n'a pas d'effet.
J'essayais de comprendre cela pour environ 2 heures hier, avec toutes sortes de _.clone()
s, en utilisant le stockage temporaire des variables, etc. Enfin, juste quand je pensais que je devenais folle, j'ai trouvé une solution. Alors j'ai pensé que quelqu'un dans le futur (fyuuuture!) pourrait avoir le problème d'enregistrement.
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);
}
});
});
});
- double possible de Comment transformer une Mangouste document en un simple objet?
Vous devez vous connecter pour publier un commentaire.
Pour des cas comme ça où vous voulez une plaine JS objet au lieu d'un modèle complet de l'instance, vous pouvez appeler
lean()
sur la requête de la chaîne comme suit:De cette façon
data
est déjà une plaine JS objet que vous pouvez manipuler comme vous le souhaitez.findOne
, je peux juste modifier l'objet et ensuite appelerdata.save()
qui semble très bien fonctionner (je suis ajoutant à un tableau)aggregate
au lieu d'un simplefind
?lean()
.Je pense que la Mangouste documentation n'est pas ce assez clair, mais les données renvoyées dans la requête (bien que vous pouvez res.send() il) est en fait une Mangouste objet de Document, et non PAS un objet JSON. Mais vous pouvez résoudre ce problème avec une ligne...
toObject()
, qui fait la même chose quetoJSON()
mais avec moins de confusion de nom.TypeError: data.toObject is not a function
J'ai reçu ce, même avectoJSON
result
, j'ai été en mesure de modifierresult._doc
.