一尘不染

为什么不能修改猫鼬查询返回的数据(例如:findById)

node.js

当我尝试更改猫鼬查询返回的数据的任何部分时,它均无效。

昨天,我尝试_.clone()使用各种s,使用临时存储变量等来解决大约2个小时的问题。最后,就在我发疯的时候,我找到了解决方案。因此,我认为将来有人(保存!)可能会出现保存问题。

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

阅读 313

收藏
2020-07-07

共1个答案

一尘不染

对于需要普通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对象,您可以根据需要对其进行操作。

2020-07-07