태그 보관물: mongoose

mongoose

Mongoose 쿼리에서 반환 된 데이터를 수정할 수없는 이유 (예 : findById) s를 사용 하여이 문제를 파악하려고했습니다

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);
            }
        });
    });
});


답변