【问题标题】:Add a new property to Mongoose Document after fetch [duplicate]获取后向猫鼬文档添加新属性[重复]
【发布时间】:2015-10-10 15:22:11
【问题描述】:

我在理解 JavaScript 中的变量操作时遇到了问题。 以下代码:

UserScore.find(filter, function (err, userScores) {
  var contests = [];
  userScores.forEach(function(userScore)
  {
    contests.push(userScore.ContestId);
  });
  Contest.find({ '_id': { $in : contests } }, function(err, contestItems)
  {
    var result = [];

    contestItems.forEach(function(con)
    {
      userScores.forEach(function(element) {
        if(element.ContestId == con._id)
        {
          con.UserTeamName = element.TeamName;
          con.UserPersonalScore = element.Score;
          console.log(con);
          console.log(con.UserPersonalScore);
          result.push(con);
          return;
        }
      });
    });
    res.status(200).json(result);
  });
});

打印没有添加两个属性的“con”,并打印具有适当值的“con.UserPersonalScore”。当推送到结果时,con 没有其他属性。我错过了什么?

我想我是在以某种方式创建局部变量而不是属性,但为什么不将其推送到结果数组?

【问题讨论】:

  • 你需要提供一个实际演示问题的测试用例——sscce.org——你正在操纵很多变量(这可能可以简化),但没有向我们展示它们是如何定义的,并且您声称 result 中的 con 的价值是什么,而没有向我们展示您是如何确定的。
  • 请编写con的完整json或对象结构
  • 这里似乎也没有任何 JSON。 benalman.com/news/2010/03/theres-no-such-thing-as-a-json
  • 从 MongoDB 读取的对象应该处于冻结状态。您可能无法对其进行变异。
  • @TaoP.R.没错!非常感谢!感谢您的评论,我发现了这个问题:Why can't you modify the data returned by a Mongoose Query 并使用lean() 成功了。您可以发布答案以便我接受吗?

标签: javascript mongodb mongoose


【解决方案1】:

从 Mongodb 查询返回的对象处于冻结(不可变)状态

您的代码似乎与 MongoDB 交互。返回的对象实际上是一个 Mongodb 模型实例,而不是一个普通的 javascript 对象。您不能修改从查询返回的对象。

将 Mongodb 文档转换为 JSON 对象

.toObject() 可以解决问题。它将冻结的 MongoDB 文档转换为 JSON 对象。

【讨论】:

  • 我还参考.toObject() 对其进行了更新,因为还没有人在线程中提及它。希望对遇到这个问题的人也有帮助。
  • *到一个 JS 对象。 JSON 是一个字符串结构。
猜你喜欢
  • 2018-06-12
  • 2019-02-03
  • 2023-03-21
  • 2014-09-06
  • 2020-04-15
  • 2020-08-05
  • 2016-07-30
  • 2015-06-03
  • 2020-12-22
相关资源
最近更新 更多