mongoose findOne()调用未保存,输出中没有错误

mongoose findOne() call not saving and no error in output

本文关键字:输出 有错误 保存 findOne 调用 mongoose      更新时间:2024-04-26

我正在做一个简单的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'的简单属性集时,mongoose有一些智能可以自动检测更改。但是,当您访问深度嵌套的模式并在图的深处更改属性时,顶级文档无法自动检测到这一点。所以你需要告诉猫鼬你改变了什么。

doc.markModified('data.' + var1 + '.' + var2);

如果你得到了正确的咒语,猫鼬将能够保存你的零钱。