データベース自体でこれを行う方法は 2 つあります (データを移動するためのクライアント コードを記述する方法は最適ではありません)。
レプリケーションに関する最新のリファレンスについては、http://wiki.apache.org/couchdb/Replication を参照してください(Apache の wiki は、この回答を書いている時点でダウンしています)。
名前付きドキュメントの複製
複製するドキュメントとそのドキュメントが正確にわかっている場合は_id
、複製を呼び出すときにそれらを配列で指定できます。たとえば、これは と を含む 2 つのドキュメントを複製_id
しdoc-a
ますdoc-b
。
{
"source": "https://USER:PASS@USER.cloudant.com/dbname-qa",
"target": "https://USER:PASS@USER.cloudant.com/dbname-production",
"doc_ids": [ "doc-a", "doc-b" ]
}
フィルタリングされたレプリケーション
移動するレコードをプログラムで指定できる場合は、フィルター処理されたレプリケーションを使用できます。true
ドキュメントを複製するかしないかを返す関数を作成しますfalse
。例えば...
function(doc) {
/*
* This will not replicate doc deletions. Add `&& doc._deleted` to replicate
* those as well.
*/
if(doc.type === "user") {
return true;
}
return false;
}
type
...属性が と等しいすべてのレコードを複製し"user"
ます。
if
ブロック全体を削除して、return (doc.type === "user");
慣れている場合にのみ行うこともできます。
このコードは、デザイン ドキュメントに保存されます。上記の関数を格納する ddoc の例を次に示します。
{
"_id": "_design/app",
"filters": {
"myfilter": "function(doc) { return (doc.type === \"user\"); }"
}
}
次に、レプリケーション中に次のようにフィルターを呼び出します。
{
"source": "https://USER:PASS@USER.cloudant.com/dbname-qa",
"target": "https://USER:PASS@USER.cloudant.com/dbname-production",
"filter": "app/myfilter"
}