猫鼬不保存文件

时间:2014-08-27 10:34:11

标签: node.js mongoose

我一直致力于一个简单的更新功能,如下所示:

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},
 });

1 个答案:

答案 0 :(得分:0)

啊,我发现了问题。 Mongo确实正在执行保存,但它并不知道属性已经改变。

最后,修复它就像添加

一样简单
user.markModified('info');

然后一切都按预期执行。令人遗憾的是,猫鼬并没有认识到这一点。感谢@ vinz243指出我正确的方向!