如何将文档从一个db复制到另一个db(couchDB)

时间:2013-08-31 14:45:08

标签: json couchdb

似乎我需要将couchDB JSON文档加载到客户端,然后将其发布到另一个couchdb数据库,以便将其从一个db复制到另一个db?或者有服务器端方法吗?

参考 http://docs.couchdb.org/en/latest/api/documents.html#copy-db-doc 复制命令是非标准的http,仅在一个数据库内。

2 个答案:

答案 0 :(得分:4)

是的,COPY只能在单个数据库中使用,但您可以复制单个或多个文档:

curl -X POST http://localhost:5984/_replicate -H "Content-Type: application/json" -d '{"source": "db_a", "target":"db_b", "doc_ids": ["foo"]}'

但是,在这种情况下,您无法像COPY那样更改文档ID。如果您需要此文件,请首先复制COPY文档,然后根据需要将其复制并在源文件中删除。三个HTTP API调用仅使用服务器端方法而不是将文档内容加载到客户端 - 决定使用它而不是在客户端上具有复制逻辑是你的。

答案 1 :(得分:0)

使用node.jsrequest模块。

Pre:目标文档存在于DB中。原始附件存在于DB

var originAttachment = 'somefile.txt'
var originDocId = '1somecouchdbid';
var origindb = 'http://localhost:5984/db1';

var destinationAttachment = 'somefile.txt'
var destinationDocId = '2somecouchdbid';
var desinationdb = 'http://localhost:5984/db2';

var uridestination = desinationdb + "/" + destinationDocId;

request(uridestination, function(err, res, body){

if(err){
    throw err;
}

var doc = JSON.parse(body);

var origin =  origindb + '/' + originDocId + '/' + encodeURIComponent(originAttachment);

var optionsOrigin = {
    url: origin
};

var uridestination = desinationdb + '/' + destinationDocId + '/' + encodeURIComponent(destinationAttachment) + '?rev=' + doc._rev;

var optionDestination = { 
    url: uridestination,
    method: 'PUT',
    headers: {
        'Content-Type': false
    }
};

request(optionsOrigin)
.pipe(request(optionsDestination, function(err, res, body){
    if(err){
        throw err;
    }
    console.log(body);        
}));
});