CouchDB проверяет, существует ли документ в функции проверки - PullRequest
0 голосов
/ 24 сентября 2019

Я хотел бы посмотреть, существует ли в базе данных документ, для которого поле имени "name" установлено в "имя", прежде чем разрешить добавление нового документа в базу данных.

Если это возможнов CouchDB с использованием обработчиков обновлений (внутри проектных документов)?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Это не широко известно, но конечной точке _update разрешено возвращать документ с _id проп, отличным от запрошенного.Это означает, что в вашем случае вам нужен уникальный документ, скажем _id:"doc-name", который будет служить ограничением.

Затем вы вызываете что-то вроде POST _design/whatever/_update/saveDependentDoc/doc-name, предоставляя новый документ с различными _id в качестве тела запроса.

Ваша _update функция будет эффективно получать два документав качестве ввода (или null и newDoc, если ограничение документа отсутствует).Затем функция решает, что ей делать: возвращать полученный документ, чтобы сохранить его, или ничего не возвращать.

Решение не является полным ответом на ваш вопрос, однако в некоторых случаях может оказаться полезным.

Этот прием работает только для обновления существующих документов, если вы точно знаете ревизию.

0 голосов
/ 26 сентября 2019

Кажется, вы ищете уникальное ограничение в CouchDB.Единственное уникальное ограничение, поддерживаемое CouchDB, основано на идентификаторе документа.

Вы должны включить значение атрибута «имя» в идентификатор документа, если хотите, чтобы на нем была основана уникальность документа.

Проверка функций обновления документов, определенных в исходных документах, может использовать только данные создаваемого / обновляемого / удаленного документа, он не может использовать данные из других документов в базе данных.

Вы можете найтианалогичный вопрос здесь .

...