首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么不能修改Mongoose查询返回的数据(例如: findById)

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

Stack Overflow用户
提问于 2013-01-24 23:03:27
回答 2查看 31.8K关注 0票数 99

当我尝试更改Mongoose查询返回的数据的任何部分时,都没有效果。

我昨天花了大约2个小时尝试解决这个问题,使用了各种_.clone(),使用临时存储变量,等等。最后,就在我觉得我快要疯了的时候,我找到了一个解决方案。所以我想将来会有人(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);
            }
        });
    });
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 05:09:33

对于这样的情况,您需要一个普通的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对象,您可以根据需要对其进行操作。

票数 169
EN

Stack Overflow用户

发布于 2013-01-24 23:03:27

我认为Mongoose文档对此不够清楚,但是查询中返回的数据(尽管您可以使用res.send() )实际上是一个Mongoose文档对象,而不是JSON对象。但是你可以用一行来解决这个问题...

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);
            }
        });
    });
});
票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14504385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档