如何修改Mongoose查询返回的对象?
假设我们有以下架构:
var S = new mongoose.Schema( { 'name': String, 'field': String } );
我对结果进行以下查询和修改:
var retrieve = function(name, callback) {
S.findOne({ name: name }).exec(function (err, obj) {
if (err) return handleError(err);
obj['field'] = 'blah';
callback(obj);
});
}
obj.field
不会包含blah
,而是查询返回的原始值,就好像它是只读的一样。发生了什么事?
注意:我的环境是Node.js,Express,Mongoose和MongoDB
答案 0 :(得分:2)
注意:这是一个编辑,我的原始答案相当不同
所以这有点令人困惑但是 Mongoose返回MongooseDocument对象而不是普通的JSON对象。所以在obj上使用.lean()方法将它变成JSON,然后从那里开始根据需要改变它。
感谢Ze Jibe。
答案 1 :(得分:2)
从mongoose返回的 doc 对象在某种程度上是只读的。要从中获取可写对象,您必须运行:
var writeableObject = doc.toObject()
writeableObject['field'] = 'blah'
res.send(writeableObject)
在mongoose文档中向下滚动到“转换”以阅读更多内容:link