Есть ли способ добавить строку в начало идентификатора документа кушетки? То есть. "article_ <обычный случайный идентификатор здесь>" - PullRequest
1 голос
/ 11 февраля 2012

Название в значительной степени объясняет мою проблему.Если это невозможно, как я могу написать свои собственные идентификаторы?В частности, как мне сгенерировать строку идентификатора, которая, как мне известно, в настоящее время не занята Couch, тогда я могу добавить строку самостоятельно и сохранить ее.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

Вы можете использовать обработчик обновлений , чтобы объединить префикс по вашему выбору и автоматически сгенерированный UUID.Обработчик обновлений в основном перехватывает HTTP-запрос, выполняет дополнительное преобразование и возвращает новый документ.(и сообщение, которое будет отправлено в ответ пользователю)

В обработчике обновлений объекту req также присваивается UUID, который CouchDB назначил бы документу.Если для текущего запроса нет существующего документа, вы можете создать новый полностью с нуля.

function (doc, req) {
    // if no document exists
    if (!doc) {
        // create a new one
        doc = {
            // req.id is the generated UUID for this request
            _id: "article_" + req.id
        }; 
    }

    // always return an array 1) the new doc and 2) the string response message
    return [ doc, "New Article Created" ];
}

Пример здесь действительно тривиален, и более полные примеры приведены на той вики-странице, на которую я ссылалсяк.Я просто хотел показать вам только то, что вам нужно для вашего вопроса.Обработчики обновлений являются очень мощным способом реализации некоторой логики приложения на уровне базы данных.

2 голосов
/ 12 февраля 2012

Я предпочитаю ответ Доминика, но для полноты вы также можете предварительно загрузить группу UUID из CouchDB и объединить их самостоятельно. Чтобы получить партию из пяти:

$ curl -i example.iriscouch.com/_uuids?count=5
HTTP/1.1 200 OK
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
ETag: "86908CQ9GCBC01P6VF18YM2P4"
Date: Sun, 12 Feb 2012 02:03:23 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 187
Cache-Control: must-revalidate, no-cache
Connection: keep-alive

{"uuids":["da769daee5996412c8f598155c002885","da769daee5996412c8f598155c0034b4","da769daee5996412c8f598155c00406f","da769daee5996412c8f598155c004c18","da769daee5996412c8f598155c00501a"]}

Теперь вы можете создавать свои собственные идентификаторы. У вас впереди еще много работы, чтобы написать и поддерживать код для всего этого. Но преимущество заключается в том, что вам не нужна функция обновления, выполняющая функцию Javascript (и потенциально вызывающая процесс Javascript на сервере) для каждого обновления документа.

Лично я бы начал с техники Доминика и перешел бы к своей, только если / когда вы столкнетесь с проблемами с производительностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...