我想在数据库中是否存在一个将名称字段“名称”设置为“名称”的文档,然后才允许将新文档添加到数据库中。
是否可以在CouchDB中使用更新处理程序(在设计文档内部)?
似乎您正在CouchDB中寻找唯一约束。 CouchDB支持的唯一唯一约束是基于文档ID。
如果您希望基于它的文档唯一性,则应在文档ID中包含“名称”属性值。
在设计文档中定义的验证文档更新功能只能使用正在创建/更新/删除的文档的数据,而不能使用数据库中其他文档的数据。
您可以找到类似的问题here。
这并不广为人知,但是_update
端点允许返回带有_id
道具不同于所请求的文档的文档。这意味着,在您的情况下,您需要有一个唯一的文档,例如_id:"doc-name"
,它将作为约束。
然后您像POST _design/whatever/_update/saveDependentDoc/doc-name
一样调用smth,为新文档提供different _id
作为请求正文。
您的_update
函数将有效地接收两个文档作为输入(如果缺少约束文档,则为null和newDoc)。然后,该函数决定应执行的操作:返回接收的文档以将其保留,或不返回任何内容。
解决方案不能完全解决您的问题,但是在某些情况下可能会有所帮助。
当然,如果您知道修订版本,此技巧仅适用于更新现有文档。