使用参数进行couchdb筛选复制时出错

使用参数进行couchdb筛选复制时出错,couchdb,replication,Couchdb,Replication,我试图在两台不同的机器上运行过滤复制,我意识到这只会在执行拉复制时发生,如果执行推复制,则工作正常 curl -X POST http://localhost:5984/_replicate -d '{\"source\":\"http://MARTIN-NEWPC:5984/pdlib\",\"target\":\"pdlib\",\"filter\":\"replication/SINGLE_COLLECTION\",\"query_params\":{\"key\":\"bb579347-

我试图在两台不同的机器上运行过滤复制,我意识到这只会在执行拉复制时发生,如果执行推复制,则工作正常

curl -X POST http://localhost:5984/_replicate -d '{\"source\":\"http://MARTIN-NEWPC:5984/pdlib\",\"target\":\"pdlib\",\"filter\":\"replication/SINGLE_COLLECTION\",\"query_params\":{\"key\":\"bb579347-9bfb-4dda-84eb-622b43108872\"}}' -H "Content-Type: application/json"
我从该请求中得到的神秘响应是:

{"error":"json_encode", "reason":"{bad_term, <0.20050.0>}"}
关于可能的原因有什么想法吗?

当CouchDB试图将一个查询值解释为JSON(而不是原始(无引号)字符串)时,通常会出现400“无效UTF-8 JSON”错误。在这种情况下,复制配置会导致此HTTP请求:

GET /pdlib/_changes?key=bb579347-9bfb-4dda-84eb-622b43108872&filter=replication/SINGLE_COLLECTION&style=all_docs&heartbeat=10000&since=0&feed=normal 400
_changes提要本身不使用
参数,但是普通的CouchDB视图查询会使用参数,并且期望它是一个JSON值-因此,您可以尝试将该查询参数重命名为其他名称


(有点遗憾的是,用户定义的过滤器(和列表等)函数与CouchDB本身共享查询参数名称空间……您可能希望在自定义参数前面加上一些不太可能与当前或将来的内置选项冲突的前缀,例如
myapp\u key
)在我看来,您的JSON转义方式有问题。这对我很有用:


curl-X POST-d'{“source”:“source_db”,“target”:“target_db”,“filter”:“ddoc/filter name”,“query_params”:{“key”:“some_key”}'-H“Content Type:application/json”

嘿,感谢您的关注,我正在传递引用的值,否则正如您所说,我会得到一个json错误(这只适用于推送复制)。此外,query_param是我找到的唯一一个将参数传递到复制筛选器的“文档化”参数名,在函数中,您必须使用“req.query”来获取它们,我如何使用myapp_key param在筛选器函数中获取参数?。我必须在解决方案中使用推式复制来解决这个问题,我当时正急于完成它,我会在有空闲时间时继续挖掘。我的意思是,用
query\u参数:{prefixed\u key:somevalue}
存储复制文档,而不是
query\u参数:{key:somevalue}
。然后查找
req.query.prefixed_key
,而不是
req.query.key
。这只是一种预感,但我怀疑CouchDB正在处理query.key特殊。
function (doc, req) {
    if (doc.type == 'collection' || doc.type == 'document') {
        for (var i in doc.path) {
            if (doc.path[i] == req.query.key) {
                return true;
            }
        }
    }
    return false;
}
GET /pdlib/_changes?key=bb579347-9bfb-4dda-84eb-622b43108872&filter=replication/SINGLE_COLLECTION&style=all_docs&heartbeat=10000&since=0&feed=normal 400