文档更新与CouchDB设计更新冲突

时间:2018-12-24 20:44:20

标签: triggers couchdb couchdb-2.0 design-documents

我正在尝试创建等效于传统RDBM的创建/更新触发器。 create_ts可以很好地创建,但是update_ts部分对我不起作用。

"updates": {
  "add_ts": "function(doc, req)
               { if(!doc){
                   var result=JSON.parse(req.body);
                   result.created_ts=new Date();
                   return [result, 'Created']
               }
              doc.update_ts=new Date(); 
              return [doc,'Updated'];  
              }"
},

文档创建正确:

curl -X POST $COUCHDB_URL/mobile_gateway/_design/devicetokens/_update/add_ts  -d ' {"_id":"aaaa", "boris":"Ioffe"} '

   {
   "_id": "aaaa",
   "_rev": "7-70069ed48a5fa2a571b5ad83067010b9",
   "boris": "Ioffe",
   "created_ts": "2018-12-24T20:24:58.064Z"
   }

curl -X PUT $COUCHDB_URL/mobile_gateway/_design/devicetokens/_update/add_ts  -d ' {"_id":"aaaa", "boris":"Loffe"} '

{“错误”:“冲突”,“原因”:“文档更新冲突。”}

我觉得我在了解沙发数据库文档更新时缺少一些基本知识。

1 个答案:

答案 0 :(得分:2)

根据OP请求移动评论以回答。

When the request to an update handler includes a document ID in the URL, the server will provide the function with the most recent version of that document.根据第二段开头的句子,您似乎已经舍弃了PUT网址中的ID,只提供了正文。

您的请求应如下所示

curl -X PUT $COUCHDB_URL/mobile_gateway/_design/devicetokens/_update/add_ts/aaaa  -d ' {"_id":"aaaa", "boris":"Loffe"}