问题描述
我想将所有设计文档和某些包含字段clientId的文档从原始(A)复制到复制(B)。
我尝试了两种方法,但是都遇到相同的问题:
它会不断更新我的设计文档,但不会更新带有clientId的普通文档。它们在创建复制时仅复制一次。
1。尝试
curl -H 'Content-Type: application/json' \
-X POST http://admin:*******@mycare.owitec.lan:5984/_replicator \
-d '{
"continuous" : true,"create_target" : true,"source" : {
"url": "http://mycare.owitec.lan:5984/mycare_10001","headers": {
"Authorization": "Basic YWRtaW46QXNkZmdoKjU9"
}
},"target" : {
"url": "http://mycare.owitec.lan:5984/mycare_rep_10001","filter": "article/clientDataRep"
}'
function(doc,req) {
var v = doc._id.substr(0,6);
if (v === '_desig' || v === '10001:') {
return true;
}
return false;
}
2。尝试
curl -H 'Content-Type: application/json' \
-X POST http://admin:********@mycare.owitec.lan:5984/_replicator \
-d '{
"continuous" : true,"source" : {
"url": "http://mycare.owitec.lan:5984/mycare_10001","headers": {
"Authorization": "Basic YWRtaW46QXNkZmdoKjU9"
}
},"target" : {
"url": "http://mycare.owitec.lan:5984/mycare2_rep_10001","selector": { "clientId": {"$exists": false} }
}'
我还检查了两个数据库是否存在冲突,并且两者都没有。我究竟做错了什么?在我有双向复制(从/到)的其他数据库中,我没有问题!
解决方法
是设计文档的validate_doc_update函数检查了两件事:
如果是更新,则您必须是作者或有一定规则
根据doc.type对象仅允许使用某些字段,而我有不符合要求的旧数据
复制始终在运行,我只是没有注意到(想想)validate_doc_update正在对其进行过滤