как мне проверить базу данных для этого идентификатора и, если да, решить, добавлять ли новую запись или добавить.
CouchDB сделает это за вас, предполагая, что HTTP-клиент запускает вашобновить функцию, используя идентификатор.Как описано в документации :
Когда запрос к обработчику обновлений включает идентификатор документа в URL, сервер предоставит функции самую последнюю версию этого документа
В примере кода, который вы нашли, функция обновления выглядит как function(doc, req)
, поэтому в коде внутри этой функции переменная doc
будет уже иметь существующий документ "внутри "вашей базы данных CouchDB.Все входящие данные от клиента / пользователя будут найдены где-то в пределах req
.
Так что для вашего случая это может выглядеть примерно так:
function(doc, req){
if (doc) {
doc.grades.push(req.form.the_grade);
return [doc, "Added the grade to existing document"];
} else {
var newDoc = {_id:req.uuid, grades:[req.form.the_grade]};
return [newDoc, "Created new document ("+newDoc._id+") for the grade"];
}
}
Есликлиент выполняет POST для /your_db/_design/your_ddoc/_update/your_update_function/existing_doc_id
, после чего будет запущена первая часть if (doc)
, поскольку вы получите существующий документ (предварительно выбранный для вас) в переменной doc
.Если клиент делает POST только на /your_db/_design/your_ddoc/_update/your_update_function
, тогда doc
не предоставляется, и вы должны создать новый (предложение else
).
Обратите внимание, что клиент будет необходимо знать идентификатор для обновления существующего документа.Либо отследите, посмотрите, либо - если нужно и поймете недостатки - сделайте их детерминированными, основываясь на чем-то известном.
Кроме того: db.get()
, который вы упомянули, вероятно, от CouchDB HTTP-клиент библиотека и недоступна (и не будет работать) в контексте любого обновления / шоу / списка / и т. Д.функции, которые выполняются изолированно в базе данных "сама".