Возможно ли добавлять поля в документ с помощью функции проверки CouchDB?

#javascript #validation #couchdb

#javascript #проверка #couchdb

Вопрос:

Одна из вещей, которая теряется при переходе на CouchDB, — это возможность иметь значения по умолчанию для поля. Например, в базе данных SQL у вас может быть поле с именем, date которое по умолчанию равно now() . Возможно ли сделать что-то подобное в CouchDB?

Насколько я могу судить, единственный фрагмент кода, который запускается при каждой операции создания и обновления, — это validate_doc_update метод конструкторского документа. Однако, когда мы протестировали его, создав фиктивную проверку, мы не можем заставить его работать. Вот простая функция проверки, которая пытается установить поле newDoc.foo , но оно никогда не сохраняется.

 function(newDoc, oldDoc, userCtr) {
    newDoc.foo = "bar!";
}
  

Мы проверили, вызывается ли validate_doc_update метод, поэтому, похоже, что если и существует способ автоматического добавления полей в документ CouchDB, то использование функции проверки — это не выход. Есть другие предложения?

Ответ №1:

Вы могли бы использовать некоторую логику представления для применения значений по умолчанию при просмотре документа через представление.

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

Я бы, вероятно, решил это, создав документ, который вы вставляете как объект, перед тем, как вы его вставите, и применив к нему значения по умолчанию, чтобы то, что вы записываете в CouchDB, уже было правильным.

Комментарии:

1. В последних версиях CouchDB запрещено изменять документ в представлении .

2. Спасибо за подсказку по обработчикам обновлений. Хорошо созданный обработчик обновлений может выглядеть точно так же, как обычный механизм создания и обновления документов, при этом все еще добавляя дополнительные поля, такие как дата создания. Кроме того, помещая их в функции обновления, они не запускаются снова после репликации.