Конфликт обновления документа с обновлением дизайна CouchDB

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

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

Я чувствую, что упускаю что-то фундаментальное в моем понимании обновлений документа couchdb.

1 ответ

Решение

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

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

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

curl -X PUT $COUCHDB_URL/mobile_gateway/_design/devicetokens/_update/add_ts/aaaa  -d ' {"_id":"aaaa", "boris":"Loffe"}
Другие вопросы по тегам