For cases like this where you want a plain JS object instead of a full model instance, you can call lean()
on the query chain like so:
Survey.findById(req.params.id).lean().exec(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;
if(++counter == len) {
res.send(data);
}
});
});
});
This way data
is already a plain JS object you can manipulate as you need to.