无法向js对象添加属性

cyb*_*bat 23 javascript mongoose node.js

我正在返回一个Mongoose文档,并希望在我发送之前添加一些元数据.然而,我无法添加任何属性,我不知道为什么.我已经检查过它是可扩展的Object.isExtensible(doc),它是.

Item.findById(req.params.id).exec(function(err, doc) {
   doc.blah = 'hello';
   console.log(doc); // No trace of 'blah'. I can change/delete existing props however
})
Run Code Online (Sandbox Code Playgroud)

可能有什么问题?

cyb*_*bat 37

啊..我的对象是一个不允许添加属性的Mongoose文档.解决方案是将返回的文档转换为普通对象或在查询中调用lean().

Item.findById(req.params.id).exec(function(err, doc) {
  var obj = doc.toObject();
  ...
});

Item.findById(req.params.id).lean().exec(function(err, doc) {      
  ...
});
Run Code Online (Sandbox Code Playgroud)

  • @ irakli2692简单来说,不,您不会。toObject,toJSON和toString从文档中剥离所有与猫鼬相关的信息,仅保留模式信息。因此,您将无权访问架构方法。 (2认同)