Quando tento alterar qualquer parte dos dados retornados por uma Consulta do Mongoose, isso não tem efeito.
Eu estava tentando descobrir isso por cerca de 2 horas ontem, com todos os tipos de programas _.clone()
, usando variáveis de armazenamento temporário, etc. Finalmente, quando pensei que estava ficando louco, encontrei uma solução. Portanto, imaginei que alguém no futuro (fyuuuture!) Pode ter o problema de salvar.
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);
}
});
});
});
Respostas:
Para casos como este, em que você deseja um objeto JS simples em vez de uma instância de modelo completa, você pode chamar
lean()
a cadeia de consulta assim:Dessa forma,
data
já é um objeto JS simples que você pode manipular conforme necessário.fonte
aggregate
sempre fornece seus resultados como objetos simples, então não há necessidade delean()
.Acho que a documentação do Mongoose não deixa isso claro o suficiente, mas os dados retornados na consulta (embora você possa res.send () isso) são, na verdade, um objeto de documento do Mongoose e NÃO um objeto JSON. Mas você pode consertar isso com uma linha ...
fonte
toObject()
, que faz a mesma coisa que,toJSON()
mas com um nome menos confuso.TypeError: data.toObject is not a function
Eu tenho isso, o mesmo comtoJSON
result
, fui capaz de modificarresult._doc
.JSON.parse(JSON.stringify(data))
lugar para Matrizes de objeto