3

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

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

4

2 回答 2

6

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

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 调用仅使用服务器端方法而不将文档内容加载到客户端 - 决定使用它而不是在客户端上具有复制逻辑是您的决定。

于 2013-08-31T15:50:33.627 回答
0

使用node.js请求模块。

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);        
}));
});
于 2015-12-01T17:36:39.727 回答