使用 CouchDB (Fauxton) 创建验证
Creating a validation with CouchDB (Fauxton)
我在 CouchDB 数据库中按以下方式存储产品:
{
"_id": "1ce330a867a803fd10082c4513000fe5",
"_rev": "4-a5eae6f790ea8b9cedea53db50a13fef",
"type": "Product",
"name": "Apple",
"price": 1
}
我想创建一个验证以确保每个带有 type
Product
的新文档都有字段 name
。我找到的唯一文档是 http://guide.couchdb.org/draft/validation.html 阅读后我 wrote/copied 这个验证:
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 创建它:
但是没用。我可以在没有 name
字段的情况下创建这样的文档。我做错了什么?
您必须创建一个新的设计文档。您需要指定 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\"}) } } }"}'
我在 CouchDB 数据库中按以下方式存储产品:
{
"_id": "1ce330a867a803fd10082c4513000fe5",
"_rev": "4-a5eae6f790ea8b9cedea53db50a13fef",
"type": "Product",
"name": "Apple",
"price": 1
}
我想创建一个验证以确保每个带有 type
Product
的新文档都有字段 name
。我找到的唯一文档是 http://guide.couchdb.org/draft/validation.html 阅读后我 wrote/copied 这个验证:
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 创建它:
但是没用。我可以在没有 name
字段的情况下创建这样的文档。我做错了什么?
您必须创建一个新的设计文档。您需要指定 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\"}) } } }"}'