15

我想添加到来自猫鼬查询的返回数据:

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

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

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

也没有运气。因为我有嵌套文档,所以使用浅拷贝是行不通的。有没有办法在这里附加数据?

4

3 回答 3

23

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

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

如果您想要一个更结构化的解决方案,您可以将虚拟属性添加到您的架构中,如此所述。

于 2012-11-12T19:49:58.570 回答
5

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

于 2012-11-12T19:49:43.627 回答
2

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

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

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

于 2016-10-27T07:57:52.170 回答