我想从mongoose查询中添加返回数据:
User.findById(userId, function(err, data) {
if (!err) {
data.newvar = 'Hello, world';
}
});
但是,当我控制台记录输出时,newvar不存在。我也尝试使用Underscore的扩展:
_.extend(data, {'newvar': 'Hello, world'});
也没有运气。由于我有嵌套文档,使用浅拷贝将无法正常工作。有没有办法在这里附加数据?
答案 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)