Конфликт обновления документа с обновлением дизайна 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"}