我正在做一个简单的findOne()并在其中保存文档,但是由于某种原因,它无法正常工作。我已经输出了对象,并且控制台中的输出是正确的,但是在save()之后,我看了看我的mongodb并没有保存它。我不确定是否应该设置某种选项。这是我的代码:
var1 = "data1";
var2 = "data1field1";
Model.findOne({'_id':some_id}).exec(function(err, doc) {
if (err) return console.error(err);
(doc.data[var1][var2][0] += 1;
console.log(doc.data.data1);
doc.save(function (err) {
if(err){console.log(err);}
console.log('success');
});
});
这是我的架构:
var modelSchema = new mongoose.Schema({
'data':{
'data1':{
'data1field1':[{type: Number}],
'data1field2':[{type: Number}]
},
'data2':{
'data2field1':[{type: Number}],
'data2field2':[{type: Number}]
}
}
});
var Model = mongoose.model('model', modelSchema);
module.exports.Model = Model;
假设我创建了此架构的实例,其中data.data1.data1field1是两个数字[0,0]的数组,输出为“ console.log(doc.data.data1);”。将会:
{
data1field1:[1,0],
data1field2:[0,0] }
success
但是保存不会发生。我是mongoose / mongodb的新手,所以我可能缺少一个简单的基本内容。
注意:我无法使用Model.update({},{$ inc {}}),因为我使用变量来选择要更改的数据对象,并且由于.update()中的文字,这是不可能的。
谢谢。
因此,当执行诸如的简单属性集时,猫鼬具有一些聪明才智,可以自动检测更改myModel.name = 'Steve'
。但是,当您访问深度嵌套的架构并在图形的深处更改属性时,顶级文档将无法自动检测到这一点。因此,您需要告诉猫鼬您做了什么更改。
doc.markModified('data.' + var1 + '.' + var2);
如果您得到正确的咒语,猫鼬将能够保存您的更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句