从Mongoose返回的数据是不可变的吗?

时间:2012-11-12 19:28:14

标签: mongodb mongoose

我想从mongoose查询中添加返回数据:

User.findById(userId, function(err, data) {
  if (!err) {
    data.newvar = 'Hello, world';
  }
});

但是,当我控制台记录输出时,newvar不存在。我也尝试使用Underscore的扩展:

_.extend(data, {'newvar': 'Hello, world'});

也没有运气。由于我有嵌套文档,使用浅拷贝将无法正常工作。有没有办法在这里附加数据?

3 个答案:

答案 0 :(得分:23)

处理此问题的一种方法是将您的mongoose模型实例转换为您可以通过调用toObject()完全控制的普通对象:

User.findById(userId, function(err, data) {
  if (!err) {
    data = data.toObject();
    data.newvar = 'Hello, world';
  }
});

如果您需要更结构化的解决方案,可以按照here所述为模式添加虚拟属性。

答案 1 :(得分:4)

事实证明,Mongoose文档是他们自己的特殊类,而不是标准的Javascript对象。为了获得可以扩展的javascript选项,必须使用toObject()方法。

答案 2 :(得分:2)

现在您可以使用lean()方法返回普通的js对象:

User.findById(userId)
  .lean()
  .exec( function(err, data) {
    if (!err) {
      data.newvar = 'Hello, world';
    }
  });

Why can't you modify the data returned by a Mongoose Query (ex: findById)