似乎我需要将一个 couchDB JSON 文档加载到客户端,然后将其发布到另一个 couchdb 数据库,以便将它从一个数据库复制到另一个数据库?或者是否有服务器端方法可以这样做?
参考 http://docs.couchdb.org/en/latest/api/documents.html#copy-db-doc 复制命令是非标准的 http 并且仅在一个 db 内。
似乎我需要将一个 couchDB JSON 文档加载到客户端,然后将其发布到另一个 couchdb 数据库,以便将它从一个数据库复制到另一个数据库?或者是否有服务器端方法可以这样做?
参考 http://docs.couchdb.org/en/latest/api/documents.html#copy-db-doc 复制命令是非标准的 http 并且仅在一个 db 内。
是的,COPY
ing 只能在单个数据库中使用,但您可以复制单个或多个文档:
curl -X POST http://localhost:5984/_replicate -H "Content-Type: application/json" -d '{"source": "db_a", "target":"db_b", "doc_ids": ["foo"]}'
但是,在这种情况下,您不能像使用COPY
. 如果你需要这个,COPY
请先记录,复制它并在需要时将其从源中删除。三个 HTTP API 调用仅使用服务器端方法而不将文档内容加载到客户端 - 决定使用它而不是在客户端上具有复制逻辑是您的决定。
Pre: 目标文档存在于数据库中。原始附件存在于数据库中
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);
}));
});