2013-04-24 117 views
1

在我的CouchDB數據庫中,我希望所有文檔在更改(並強制執行)時添加「updated_at」時間戳。CouchDB:自動更新字段

  • 我不能validation功能
  • 修改文檔
  • updates功能將無法運行,除非他們明確要求(所以它會是可能的更新文件,而不是調用特定的更新功能)

我應該如何去實施呢?

回答

2

沒有觸發_update處理程序,現在沒有辦法做到這一點。這是跟蹤文檔更改時間的好主意,但它面臨複製問題。

複製正在對公共API的頂部,這意味着:

  1. 在執行這樣的觸發你必須重複破碎,因爲這將是不可能的同步數據,因爲它是沒有文檔修改的情況。由於文檔被修改,他會收到新的修訂版本,如果您在連續模式下將數據庫A中的數據複製到B,將B複製到A,則可能會導致死循環。
  2. 在其他情況下,當複製是固定的,總有辦法解決你的觸發器。
+0

這是一個恥辱,沒有辦法獲得複製保存數據作爲免除自動更新的用戶,因爲這將解決複製問題。但仍然需要有一個couchdb工具來更新更新字段。它很骯髒,但我認爲我會對交付的更新進行驗證,以便拒絕,除非現在(只要用戶不是複製用戶)交付的'updated_at'時間在<可接受的時鐘差>範圍內。這很醜陋,但它會完成工作! – 2013-04-26 08:35:45

+0

請隨時[開放問題](https://issues.apache.org/jira/browse/COUCHDB)關於(: – Kxepal 2013-04-26 09:56:34

0

我可以建議一個解決辦法 - 你可以創建一個發出當前日期作爲一個關鍵的一個視圖(或它的一部分):

function(doc){ 
    emit(new Date, null); 
} 

這將分配當前日期的所有文件作爲一旦視圖生成被觸發(發生在第一次請求之後),並將在每次更新特定文檔時重新分配新日期。

儘管上述內容可以解決您的問題,但由於Kxepal已解釋的原因,我建議不要使用它:如果您位於複製網絡中,則每個節點將分配自己的日期。因此,考慮到這一點,我可以推薦的最好方法是在客戶端解決問題,並只在發佈日期已經嵌入的文檔中發佈。