2014-08-27 177 views
0

我一直工作在一个简单的更新功能,看起来如下:猫鼬不保存文档

exports.update = function update(req, res, next){ 

    User.findById(req.param('userId')) 
    .exec(function (err, user) { 
     if(err) return next(err); 


     if(!user) 
     return res.sendData(null, 404, lang.userNotFound); 

     var info = req.param('info'); 

     // Get the update to be made, in JSON format 
     if(info !== Object(info)) info = JSON.parse(info); 

     user.info = setProperties(user.info, info); 

     // console.log(user) gives the updated user object 

     user.save(function(err, usr) { 
     if (err) return next(err); 

     // console.log(usr) shows the updated user object 

     res.sendData(); 
     }); 
    }); 
}; 

function setProperties(object, update) { 

    if(update!== Object(update)) 
    object = update; 

    else { 
    for (var prop in update) { 
     if (object.hasOwnProperty(prop)) 
     object[prop] = setProperties(object[prop], update[prop]); 
     else 
     object[prop] = update[prop]; 
    } 
    } 
    return object; 
} 

但不幸的是,虽然一切似乎工作,在我的数据库没有什么变化。我没有得到任何错误。任何人都可以揭示这个谜团吗?谢谢!

以供参考(如果适用),这里是我的架构:

var UserSchema = new Schema({ 
    createdAt: {type: Date, default: Date.now}, 
    lastActivity: {type: Date, default: Date.now}, 
    info : {type : Schema.Types.Mixed}, 
}); 
+0

请发布更新代码 – Vinz243 2014-08-27 11:18:34

回答

0

啊,我发现这个问题。 Mongo的确在执行保存,但它不知道一个属性已经改变。

最后,固定它是如添加

user.markModified('info'); 

简单然后一切按预期执行。这是一个耻辱,猫鼬不认识我们。感谢@ vinz243为我指出了正确的方向!