Mongoose不会更新文档

时间:2015-01-01 18:01:27

标签: javascript node.js mongodb mongoose

在处理猫鼬时,我遇到了一些问题。

我写了以下代码片段:

if (!usr.settings) usr.settings = {};
async.forEach(Object.keys(params), function (item, nextitem){
    usr.settings[item] = params[item];
    nextitem();
}, function (err) {
    if (err) return callback(err);
    usr.save(function(err) {
        if (err) return callback(err);
        return callback();
    });
});

当我第一次使用它时,它工作正常,它可以完美地创建文档中的所有项目,但是当我第二次使用它时(假设我想要更新这些项目)它不会改变它们的值也不会给我任何错误。 数据保持不变。

我试着调试它。

if (!usr.settings) usr.settings = {};
async.forEach(Object.keys(params), function (item, nextitem){
    usr.settings[item] = params[item];
    nextitem();
}, function (err) {
    if (err) return callback(err);
    usr.save(function(err) {
        console.log(usr); <------------------- [At this point it shows the updated data but for some reason it doesnt save it to the db]
        if (err) return callback(err);
        return callback();
    });
});

知道为什么会这样吗? 感谢。

1 个答案:

答案 0 :(得分:0)

弄乱之后,找到了解决方案。

假设您使用以下架构:

user_schema = {
    settings = Object
}

您将无法设置设置。因此,以下代码:

usr.settings.something = 123;
usr.save(function(err) {
    if (err) return callback(err);
    return callback();
}); 

什么都不做,仍然不会导致错误。 如果要解决此问题,请将此修复程序应用于架构:

user_schema = {
    settings = {
        something : Number
        something_else: Object
    }
}

现在您可以将something设置为值:)

我希望它对某人有帮助