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

标签 node.js mongoose

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

我昨天花了大约 2 个小时试图解决这个问题,使用各种 _.clone(),使用临时存储变量等。最后,就在我想我要去的时候疯了,我找到了解决办法。所以我想将来有人(fyuuuuture!)可能会遇到保存问题。

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

关于node.js - 为什么不能修改 Mongoose 查询返回的数据(例如 : findById),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674278/

相关文章:

javascript - 使用 PUT 和 update() Mongoose 增加 JSON 字段

mongodb - 如何在nodejs上安装 Mongoose 驱动程序?

javascript - 检测客户端的 socket.io 断开连接和销毁事件

来自 MDN 和书籍的 JavaScript `this` 示例无法正常工作...为什么?

node.js - Mongoose 填充与聚合

node.js - 在 Mocha 测试中将 Superagent/Supertest 与 Express 应用程序结合使用

node.js - 使用bulkWrite 更新/更新插入不起作用

javascript - 如何使对象引用在 Node 模块中可用?

javascript - 如何从通过 npm 安装的库中引用 CSS?

javascript - Promise 在 forEach 循环完成之前解析