Mongoose查询结果是只读的吗?

时间:2013-03-27 22:31:07

标签: json node.js mongodb mongoose

如何修改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

2 个答案:

答案 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