似乎我需要将couchDB JSON文档加载到客户端,然后将其发布到另一个couchdb数据库,以便将其从一个db复制到另一个db?或者有服务器端方法吗?
参考 http://docs.couchdb.org/en/latest/api/documents.html#copy-db-doc 复制命令是非标准的http,仅在一个数据库内。
答案 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)
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);
}));
});