Json Mongoose查询结果是否为只读?
如何修改Mongoose查询返回的对象 假设我们有以下模式:Json Mongoose查询结果是否为只读?,json,node.js,mongodb,mongoose,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(er
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 所以这有点令人困惑,但是Mongoose返回MongooseDocument对象,而不是普通的JSON对象。因此,在obj上使用.lean()方法将其转换为JSON,然后根据需要对其进行修改 感谢Ze Jibe。从mongoose返回的doc对象以某种方式是只读的。要从中获取可写对象,必须运行:
var writeableObject = doc.toObject()
writeableObject['field'] = 'blah'
res.send(writeableObject)
向下滚动到mongoose文档中的“Transform”以阅读更多内容:谢谢Niall,但没有解决问题:
obj
仍保持不变。我还应该明确指出,我不想更新数据库中的对象,而只是使用它的副本,我可以出于其他目的修改它。我试着把obj
复制到cpy
并修改cpy
,但我遇到了同样的问题,cpy
似乎也是只读的。嗯,你有什么理由选择.exec overS.findOne({name:name},function(err,obj){..})
?嗯,奇怪的是,我现在真的把东西扔出去了。在任何回调(obj)发生的地方会发生什么?那么它是只读的吗?听起来很奇怪,它是只读的。你让我感兴趣的是回调(obj)是一个res.send(obj)
,因此我可以在浏览器中看到obj
的内容。我还将console.log()
放在obj['field']='blah'
命令的周围,命令前后的obj
内容是相同的(如控制台中打印的)。我不知道…你知道你在哪里有res.send(obj)?你能快速抛出一个obj['field']='blah'吗代码>只是为了检查是否可以?可能会给出一个提示..可能重复的