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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

当我试图更改Monose查询返回的数据的任何部分时,它不会产生任何效果。

我昨天花了两个小时想办法解决这个问题,用_.clone()s,使用临时存储变量等。最后,正当我快要发疯的时候,我找到了一个解决办法。所以我想到:

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对象,你可以根据需要操纵它。

用户回答回答于

我认为Monose文档没有足够清楚地说明这一点,但是在查询中返回的数据(尽管您可以重新发送()它)实际上是一个Monose文档对象,而不是一个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);
            }
        });
    });
});

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问5 回答
  • uncle_light

    5 粉丝518 提问3 回答
  • 学生

    2 粉丝477 提问3 回答
  • 军哥

    重庆雷驰信息技术有限公司 · 经理 (已认证)

    5 粉丝1 提问3 回答

扫码关注云+社区

领取腾讯云代金券