在CouchDB复制过程中验证文档

问题描述

在复制期间,我需要验证客户端尝试写入我的CouchDB实例的文档。理想情况下,我应该只拒绝允许所有其他人通过的“无效”文件。其他可能的结果可能是拒绝整个复制过程,并且完全不接受任何文档。我无法使用validate_doc_update函数,因为它缺少做出决定所需的所有必要信息。

我考虑过为服务背后的所有endpoints needed for replication提供服务,并在应用程序级别验证文档。例如,从POST /_bulk_docs获取所有文档,如果某些文档无效,则发送400错误响应。

我是否正确理解这种方法停止了复制过程,并且数据库中可能留有部分复制的文档?这是因为在复制期间documents are uploaded in chunks,因此可能会有几次POST /_bulk_docs调用,其中第一个调用具有所有有效文档,而第二个调用则无效。

还有另一种方法,如何只丢弃无效的文档?

感谢您的帮助!

解决方法

您可以通过复制文档应用Cloudant Query选择器以指定哪些文档有效。典型的例子是抛弃墓碑:

{
    "_id": "repl01","source" : "https://.../<source>","target" : "https://.../<target>","selector": {
        "_deleted": {
            "$exists": false
        }
    }
}

有关更多详细信息,请参见https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-replication-api#the-selector-field