在SailsJS中维护模型更新的历史记录

时间:2016-08-08 19:52:58

标签: node.js mongodb mongoose sails.js sails-mongo

在Sails中维护模型的数据历史记录的有效方法是什么?例如,如果用户更新数据库,我们如何维护数据,并且我们希望保留用于在更新时恢复数据的版本。

我见过很多使用“更改”标记的示例,该标记将日期保留为子标记。这是最有效的吗?

在模型更新中,我们可以复制以前的信息。是否有更好的建议或链接与示例?

{
   text:"This is the latest paragraph",
   changes:{
      text:{
          "1470685677694":"This was the paragraph",
          "1470685577694":"This was the original paragraph"
      }
   }
}

我希望找到一个很好的解决方案来查找/搜索和优化这些数据,以便用户在必要时恢复。

1 个答案:

答案 0 :(得分:0)

您可以像下面这样定义模型,这样您就可以保留历史记录,以便恢复以前的任何值。

<强> API /模型/ Test.js

module.exports = {
  connectionName:"someMongodbServer",
  tableName:"test",
  autoCreatedAt:false,
  autoUpdatedAt:false,
  autoPk:false,
  attributes: {
    id:{
      type:"integer",
      primaryKey:true,
      autoIncrement:true
    },
    name:"string",
    history:{
      type:'json',
      defaultsTo:[]
    }
  },
  beforeCreate:function(value,cb){
    Test.count().exec(function (err, cnt) {
      if(err)
        return cb(err);
      value.id = cnt + 1;
      cb();
    });
  },
  beforeUpdate:function(values,cb){
    Test.native(function(err,collection){
      if(err)
        return cb(err);
      collection.findOne({_id:values.id},{history:0,_id:0},function(err,data){
        if(err)
          return cb(err);
        collection.updateOne({_id:values.id},{$push:{history:data}},function(err,res){
          if(err)
            return cb(err);
          console.log(res);
          cb();
        });
      })
    });
  }
};