Создание проверки с помощью CouchDB (Fauxton) - PullRequest
0 голосов
/ 28 апреля 2018

Я храню продукты в базе данных CouchDB следующим образом:

{
  "_id": "1ce330a867a803fd10082c4513000fe5",
  "_rev": "4-a5eae6f790ea8b9cedea53db50a13fef",
  "type": "Product",
  "name": "Apple",
  "price": 1
}

Я хотел бы создать проверку, чтобы убедиться, что каждый новый документ с type Product имеет поле name. Единственная документация, которую я нашел, была http://guide.couchdb.org/draft/validation.html После прочтения я написал / скопировал эту проверку:

function(newDoc, oldDoc, userCtx) {
  function require(field, message) {
    message = message || "Document must have a " + field;
    if (!newDoc[field]) throw({forbidden : message});
  }

  if (newDoc.type == "Product") {
    require("name");
  }
}

Чем я использую Fauxton для его создания:

Screencast

Но это не работает. Я могу создать такой документ без поля name. Что я делаю не так?

1 Ответ

0 голосов
/ 28 апреля 2018

Вы должны создать новый проектный документ. Вам необходимо указать поле language , которое в вашем случае будет JavaScript.

Затем вам нужно добавить поле validate_doc_update и заполнить его своей функцией.

В качестве справочного материала вы можете обратиться к базе данных _replicator для _design/_replicator.

Альтернативный

В командной строке это можно сделать с помощью (остерегайтесь экранирования "):

curl -X PUT http://127.0.0.1:5984/shop/_design/product_validation -d '{"validate_doc_update": "function(newDoc, oldDoc, userCtx) { if (newDoc.type == \"product\") { if (!newDoc[\"name\"]) { throw({forbidden: \"missing name\"}) } } }"}'
...