3

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

4

2 回答 2

3

注意:这是一个编辑,我原来的答案是相当不同的

所以这有点令人困惑,但Mongoose 返回 MongooseDocument 对象而不是普通的 JSON 对象。因此,使用 obj 上的 .lean() 方法将其转换为 JSON,然后从那里开始根据需要更改它。

感谢泽吉贝。

于 2013-03-27T22:36:21.547 回答
2

从 mongoose 返回的doc对象在某种程度上是只读的。要从中获取可写对象,您必须运行:

var writeableObject = doc.toObject()
writeableObject['field'] = 'blah'
res.send(writeableObject)

向下滚动到猫鼬文档中的“转换”以阅读更多信息:链接

于 2013-05-05T05:54:25.427 回答