Cuando intento cambiar cualquier parte de los datos devueltos por Mongoose Query, no tiene ningún efecto.
Estuve tratando de resolver esto durante aproximadamente 2 horas ayer, con todo tipo de _.clone()
s, usando variables de almacenamiento temporal, etc. Finalmente, justo cuando pensé que me estaba volviendo loco, encontré una solución. Así que pensé que alguien en el futuro (¡fyuuuture!) Podría tener el problema de guardar.
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);
}
});
});
});
Respuestas:
Para casos como este en los que desea un objeto JS simple en lugar de una instancia de modelo completa, puede llamar
lean()
a la cadena de consultas de la siguiente manera:De esta forma
data
ya es un objeto JS simple que puede manipular según sea necesario.fuente
aggregate
siempre proporciona sus resultados como objetos simples, por lo que no es necesariolean()
.Creo que la documentación de Mongoose no deja esto lo suficientemente claro, pero los datos devueltos en la consulta (aunque puede res.send ()) es en realidad un objeto Mongoose Document y NO un objeto JSON. Pero puedes arreglar esto con una línea ...
fuente
toObject()
, que hace lo mismo quetoJSON()
pero con un nombre menos confuso.TypeError: data.toObject is not a function
Tengo esto, lo mismo contoJSON
result
, pude modificarresult._doc
.JSON.parse(JSON.stringify(data))
lugar para matrices de objetos