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

Jam*_*mes 14 mongoose mongodb

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

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

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

_.extend(data, {'newvar': 'Hello, world'});
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*yHK 23

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

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

如果您需要更结构化的解决方案,可以按照此处的说明将虚拟属性添加到架构中.


Jam*_*mes 5

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

  • 我是唯一一个认为在您尝试设置值时应该发出警告的人吗? (6认同)