如何在文档更改时添加或更新文档的时间戳?目前我有date
字段,它是从应用程序设置的,但如果任何人都可以设置时间,那么这是不安全的。
我尝试使用validate_doc_update
,但没有运气:它不会保存newDoc
更改。
答案 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>
并将文档添加到正文中。