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

时间:2015-12-14 16:11:05

标签: validation timestamp couchdb

如何在文档更改时添加或更新文档的时间戳?目前我有date字段,它是从应用程序设置的,但如果任何人都可以设置时间,那么这是不安全的。

我尝试使用validate_doc_update,但没有运气:它不会保存newDoc更改。

2 个答案:

答案 0 :(得分:0)

要执行此操作,您需要通过update handlers发送所有您的更改。

要清楚,这意味着对数据库的正常写入不会设置这些时间戳,因此如果您的数据库未公开公开,您只能可靠地执行此操作。

答案 1 :(得分: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> 并将文档添加到正文中。