当前位置: 首页 > 知识库问答 >
问题:

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

连俊智
2023-03-14

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

昨天我花了大约两个小时试图弄明白这一点,各种各样的\。clone()s,使用临时存储变量等。最后,就在我觉得自己疯了的时候,我找到了一个解决方案。所以我想到了未来的某个人(Fyuuture!)可能存在保存问题。

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

共有2个答案

夏奕
2023-03-14

我认为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);
            }
        });
    });
});
司马彬
2023-03-14

对于这样的情况,您想要一个普通的JS对象而不是一个完整的模型实例,您可以像这样在查询链上调用精简()

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

通过这种方式,数据已经是一个普通的JS对象,您可以根据需要进行操作。

 类似资料:
  • 问题内容: 当我尝试更改猫鼬查询返回的数据的任何部分时,它均无效。 昨天,我尝试使用各种s,使用临时存储变量等来解决大约2个小时的问题。最后,就在我发疯的时候,我找到了解决方案。因此,我认为将来有人(保存!)可能会出现保存问题。 问题答案: 对于需要普通JS对象而不是完整模型实例的情况,可以在查询链上调用,如下所示: 这种方式已经是一个普通的JS对象,您可以根据需要对其进行操作。

  • 我一直在研究猫鼬文档,但我找不到一种方法来实现我想要做的事情。考虑一个MangGDB用户集合。还可以考虑一个包含DB集合中所有字段的蒙古人用户模式。 现在,我想登录到控制台,所有用户,但属性已更改。有点像: 用户。图例(): 给定的异步类型。find()函数我不确定这是否可以实现。我来自C#和PHP背景,只处理关系数据库,这可以通过在用户类中使用只返回所需值的函数轻松实现。 能做到吗?!

  • 问题内容: 快速版本 基本上,我正在更新hibernate表,后续查询正在加载陈旧的值。 详细版本 hibernate(3.3.1.GA)和EhCache(2.4.2)。 包含页面的持久对象,我将页面添加到本书的中间。我正在使用Databinder / Wicket,尽管我认为这并不相关。 适用的字段/方法是: 最终结果是,有一个新页面添加到列表中,并且数据库也进行了相应更新,我已经在我的数据存储

  • 此查询由Django ORM使用RAWSQL生成: 这是一个错误 1242-子查询返回超过1行 这是子查询的结果 我读了MYSQL文档,但我不明白为什么返回两行会有问题。我试过很多替代方法。 问题出在哪里?

  • 问题内容: 今天,我写了一个查询,应该返回一个错误。而是返回带有列名和数据类型的值15 。你知道为什么吗? 结果: 问题答案: 您要指定一个常量: 货币常量表示为数字字符串,带有可选的小数点 和可选的货币符号作为前缀 因此moneyselect $15select ¥15`。 正如Jeroen在评论中指出的那样: 因为日元符号(楼)是货币指示器,并且在某些日语本机字符集中,其代码点与ASCII中的

  • 有人真的很快就否决了我的问题,因为它缺乏足够的信息。然后我编辑了它,但反对票仍然是:(