CouchDB:在插入和更新时添加时间戳。

问题描述 投票:1回答:2

如何在文档发生变化时添加或更新时间戳?目前我有 date 字段,从应用程序设置,但这是不安全的,正确的方式,如果任何人都可以设置时间。

我试过用 validate_doc_update但运气不好:它不保存。newDoc 变化。

validation timestamp couchdb
2个回答
0
投票

为了做到这一点,你需要发送 "时间戳"。 您的变化通过 更新处理程序.

要明确的是,这意味着对数据库的正常写入不会设置这些时间戳,所以只有当你的数据库没有公开暴露时,你才能可靠地做到这一点。


0
投票

对于仍然在寻找解决方案的人来说,这是我的解决方案的实现。我使用了Dominic Barnes的解决方案 下面是我如何实现的。在_design$design_name中,我添加了以下内容。

{
  "_id": "<design_name>",
  "_rev": "<rev_id>",
  "language": "javascript",
  "views": {
    "some_view_name": {
      "map": "function(doc){emit(doc.id,doc);}"
    }
  },
  "updates": {
    "update_timestamp": "function(doc, req){ 
      if (req && req.body) { 
        var newDoc = JSON.parse(req.body); 
        newDoc['timestamp'] = Date.now().toString(); 
        return [newDoc, JSON.stringify({'ok': true})];
      }
    }"
  }
}

注意,"update_timestamp "函数应该在一行,因为它是一个json文件,所以像这样。

"updates": {
    "update_timestamp": "function(doc, req){ if (req && req.body) { var newDoc = JSON.parse(req.body); newDoc['timestamp'] = Date.now().toString(); return [newDoc, JSON.stringify({'ok': true})];}}"
}

然后,我用URL的PUT请求来调用它。<couch_db_url>/<db_name>/_design/<design_name>/_update/update_timestamp/<id_doc>并在正文中添加文件。

© www.soinside.com 2019 - 2024. All rights reserved.