3

あるデータベースから別のデータベースにコピーするために、couchDB JSON ドキュメントをクライアントにロードしてから別のcouchdb データベースに投稿する必要があるようです。または、そうするためのサーバー側の方法はありますか?

参照 http://docs.couchdb.org/en/latest/api/documents.html#copy-db-doc コピー コマンドは非標準の http であり、1 つのデータベース内にのみ存在します。

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"]}'

ただし、この場合、 のようにドキュメント ID を変更することはできませんCOPY。これが必要な場合は、COPY最初に文書化し、複製し、必要に応じてソースから削除してください。サーバー側のメソッドのみを使用し、ドキュメント コンテンツをクライアントに読み込まないための 3 つの HTTP API 呼び出し - クライアントにコピー ロジックを配置する代わりに、それを使用するかどうかはあなた次第です。

于 2013-08-31T15:50:33.627 に答える
0

node.jsrequestモジュールを使用します。

前: 宛先ドキュメントは 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);        
}));
});
于 2015-12-01T17:36:39.727 に答える