基于现有文档内容的couchdb验证

时间:2012-10-29 20:00:05

标签: validation couchdb

问题

是否可以将其他couchdb文档作为标准couchdb验证函数的一部分进行查询?

如果没有,在couchdb验证函数中包含其他文档的属性作为验证规则的一部分的标准方法是什么?

基本原理

考虑一个普通的地址簿应用程序,其中验证功能旨在防止两个或多个条目在其中一个地址簿输入字段中具有相同的“电子邮件”值。

还要考虑一个地址簿应用程序,根据邮政编码是否是基于美国的邮政编码或其他内容,可以在单独的文档中指定验证规则。

1 个答案:

答案 0 :(得分:2)

不,无法在validate_doc_update函数中查询其他couchdb文档。每个都以隔离方式运行,仅将引用传递给:新文档,旧文档和用户(如果适用)。

我个人的经验是,至少有三种方法可以处理重复检查:

  1. 使用Cloudant作为CouchDB提供程序。如果您想进行实验,它们现在提供免费套餐,但它们保证CouchDB数据库的节点之间的一致性。 (见#2)
  2. 我使用了一个二级“保留表”来表示使用type-key作为ID的名字。然后,如果不使用像Cloudant这样的系统,则需要检查冲突。基本上,有一个简单的文档,维护一个密钥,以防止重复。考虑到你需要注意冲突,编写代码并不好玩。 (即使使用cloudant,您也需要处理失败的写入请求,但这比处理跨多个节点的数据复制的时序问题更容易。)
  3. 使用像MySQL这样的传统数据库,例如,可以为您描述的特定数据值维护唯一且一致的索引。然后将文档存储在CouchDB中。虽然有点烦人,你需要不同的数据提供商,但它是可靠的。
  4. (可选:确定CouchDB不适合您正在构建的系统类型)