2017-08-11 66 views
0

我想創建一個通用文檔更新處理程序。CouchDB文檔更新處理程序:Javascript

我使用:

function(doc, req) {var field = req.query.field; var value = 
req.query.value; var message = 'set '+field+' to '+value; doc[field] = 
value; return [doc, message]; } 

該工程確定用簡單的JSON,但不與嵌套對象,如

"abc":{"ax":"one", "by":"two" ...} 

我curl命令是:

curl -X PUT 'http://127.0.0.1:5984/db/_design/updatehandler/_update/inplace/id?field=abc.ax&value=three' 

結果是一個新的字段被創建,並且原有的abc:{ax:one}被保留爲 。

有了簡單的例子:

,如果我有:"xyz":"five"

curl -X PUT 'http://127.0.0.1:5984/db/_design/updatehandler/_update/inplace/id?field=xyz&value=ten' 

...正常工作。

我還沒有嘗試"pqr":[s, t, u]的通用過程,但我想 這可能還需要不同的設計修改。

理想情況下,如果可能的話,希望至少在上述三種情況下起作用的東西,只要它不太複雜就不值得 的努力。

有人可能會很好地幫助這裏或請轉到我的一些JavaScript示例。

非常感謝。

約翰

回答

0

function (doc, req) { 
 
    function merge(nDoc,oDoc) { 
 
     for (var f in nDoc) { 
 
      var tmpNewDoc = nDoc[f], 
 
       tmpDoc = oDoc[f]; 
 
      var type = typeof(tmpNewDoc); 
 
      if (type === 'object' && tmpNewDoc.length === undefined && tmpDoc !== undefined) merge(tmpNewDoc, tmpDoc); 
 
      else oDoc[f] = tmpNewDoc; 
 
     } 
 
    } 
 
\t 
 
    if (!doc) { 
 
\t \t return [null, toJSON({ 
 
\t \t \t error: 'not_found', 
 
\t \t \t reason: 'No document were found with the specified ID or an incorrect method was used.' 
 
\t \t })]; 
 
\t } 
 
\t 
 
\t try { 
 
\t \t var newDoc = JSON.parse(req.body); 
 
\t \t merge(newDoc, doc); 
 
\t } 
 
\t 
 
\t catch (e) { 
 
\t \t return [null, ToJSON({ 
 
\t \t \t error: 'bad_request', 
 
\t \t \t reason: 'Invalid json or processing error' 
 
\t \t })]; 
 
\t } 
 
\t 
 
    return [doc, toJSON({ 
 
     doc: doc, 
 
     ok: true 
 
    })]; 
 
}" 
 
    }

只需將新的文件傳遞給該處理程序。它會將新值合併到它(警告,數組將被覆蓋)。如果您還想合併數組,則可以使用第三方庫或構建自己的遞歸合併函數。

+0

謝謝@Alexis。在這種情況下,你提出了,curl POST命令是什麼樣的? – jlb333333

+0

請參閱[本文檔](http://docs.couchdb.org/en/2.1.0/api/ddoc/render.html#post--db-_design-ddoc-_update-func) –

+0

Hi @Alexis。謝謝你。很抱歉打擾你。運行更新時出現以下錯誤:'{「error」:「render_error」,「reason」:「function raised error:(new TypeError(\」Object.assign is not a function \「'這是否表示任何I我做了一個錯誤的對話 – jlb333333