Когда я пытаюсь изменить какую-либо часть данных, возвращаемых запросом Mongoose, это не дает никакого эффекта.
Вчера я пытался понять это около 2 часов, используя всевозможные _.clone()
s, переменные временного хранения и т. Д. Наконец, когда я решил, что схожу с ума, я нашел решение. Итак, я подумал, что у кого-то в будущем (fyuuuture!) Может возникнуть проблема с сохранением.
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);
}
});
});
});
Ответы:
В таких случаях, когда вам нужен простой объект JS вместо полного экземпляра модели, вы можете вызвать
lean()
цепочку запросов следующим образом:Это
data
уже простой объект JS, которым можно манипулировать по мере необходимости.источник
aggregate
всегда предоставляет свои результаты в виде простых объектов, поэтому в них нет необходимостиlean()
.Я думаю, что в документации Mongoose это недостаточно ясно, но данные, возвращаемые в запросе (хотя вы можете res.send () it), на самом деле являются объектом Mongoose Document, а НЕ объектом JSON. Но вы можете исправить это одной строчкой ...
источник
toObject()
, который делает то же самое,toJSON()
но с менее запутанным именем.TypeError: data.toObject is not a function
Я получил это, то же самое сtoJSON
result
, чтобы изменять файл , я смог изменитьresult._doc
.JSON.parse(JSON.stringify(data))
вместо этого для массивов объектов