Конфликт обновления документа с обновлением дизайна CouchDB - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь создать эквивалент триггера создания / обновления, используемого в традиционных 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"} '

{"error": "конфликт", "причина": "конфликт при обновлении документа."}

Мне не хватает чего-то фундаментального в моем понимании обновлений документа couchdb.

1 Ответ

0 голосов
/ 28 декабря 2018

Перемещение комментария к ответу на основе запроса OP.

Когда запрос к обработчику обновлений содержит идентификатор документа в URL-адресе, сервер предоставит функции самую последнюю версию этого документа.. Исходя из этого предложения в начале второго абзаца, кажется, что вы оставили идентификатор в URL в PUT и указали только тело.

Ваш запрос должен выглядеть примерно такэто

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