【发布时间】:2015-09-02 00:09:21
【问题描述】:
我知道有几个类似的问题(例如这个问题:CouchDB - trigger code when creating or updating document)涉及 CouchDB 中的“更新处理程序”,但我无法看到它们是如何解决问题的;
- 每次在我的 CouchDB 数据库中创建一个新文档时,我都想添加一个时间戳
-
我在 _design/updatehandlers 中创建了一个更新处理程序并验证它被调用:
"timestampadd" : "function(doc,req) { if (!doc) { if ( req.id) { return [{_id : req.id, timestamp : new Date().getTime()}]; } return [null,'added empty']; } doc.timestamp = new Date().getTime(); return [doc,'added at ' + doc.timestamp]; }"
我的问题是这样的;在数据库中创建新文档时如何使用此功能,即我通常通过对
执行 POST 来创建的新文档 http://mycouchdb:5984/test_db
我希望 couchdb 在哪里为我创建一个 _id(例如:http://docs.cloudant.com/tutorials/crud/index.html#create)?
如果我按照文档进行操作(在本例中使用 Python),我会发布这样的帖子;
requests.post("http://mycouchdb:5984/test_db/_design/updatehandlers/_update/timestampadd",headers={'Content-type':'application/json'},data='{"foo":"bar"})
但这里的更新函数 timestampadd 显然采用“doc==null && req.id==null 路径,因为文档尚未创建并且我没有指定 ID。 这使我相信更新功能只能在现有文档上调用,尽管文档似乎暗示了什么,还是我错了?
我可以在现有文档上调用更新并添加时间戳而没有任何麻烦,效果很好,但这里的问题是在创建文档时添加时间戳。
这有可能吗..?
【问题讨论】: