Mongoose Query에서 반환 된 데이터의 일부를 변경하려고하면 아무 효과가 없습니다.
어제 약 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()
쿼리 체인을 호출 할 수 있습니다 .
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);
}
});
});
});
이 방법 data
은 이미 필요에 따라 조작 할 수있는 일반 JS 객체입니다.
답변
나는 Mongoose 문서가 이것을 충분히 명확하게하지 않는다고 생각하지만 쿼리에서 반환 된 데이터 (res.send () 할 수 있지만)는 실제로 JSON 객체가 아니라 Mongoose Document 객체입니다. 하지만 한 줄로 해결할 수 있습니다 …
Survey.findById(req.params.id, function(err, data){
var len = data.survey_questions.length;
var counter = 0;
var data = data.toJSON(); //turns it into JSON YAY!
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q;
if(++counter == len) {
res.send(data);
}
});
});
});