如何在文档发生变化时添加或更新时间戳?目前我有 date
字段,从应用程序设置,但这是不安全的,正确的方式,如果任何人都可以设置时间。
我试过用 validate_doc_update
但运气不好:它不保存。newDoc
变化。
为了做到这一点,你需要发送 "时间戳"。都 您的变化通过 更新处理程序.
要明确的是,这意味着对数据库的正常写入不会设置这些时间戳,所以只有当你的数据库没有公开暴露时,你才能可靠地做到这一点。
对于仍然在寻找解决方案的人来说,这是我的解决方案的实现。我使用了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>
并在正文中添加文件。