私はいくつかのアイデアを考えることができます。
_all_docsを使用する
すべてのドキュメントをフェッチする必要はなく、IDとリビジョンのみをフェッチする必要があります。デフォルトでは、_all_docsが返すのはそれだけです。かなり大きなリクエストをバッチで行うことができます(一度に10kまたは100kのドキュメントで十分です)。
複製してから削除
クエリを使用して_all_docs
、すべての設計ドキュメントのIDを取得できます。
GET /db/_all_docs?startkey="_design/"&endkey="_design0"
次に、それらを一時的な場所に複製します。
POST /_replicator
{ "source":"db", "target":"db_ddocs", "create_target":true
, "user_ctx": {"roles":["_admin"]}
, "doc_ids": ["_design/ddoc_1", "_design/ddoc_2", "etc..."]
}
"source"
これで、元のデータベースを削除し、との値を交換することで一時的なデータベースを複製することができ"target"
ます。
削除と「削除」
これらは実際にはリンゴとオレンジのテクニックであることに注意してください。データベースを削除すると、そのすべてのドキュメントの編集履歴が消去されます。つまり、これらの削除イベントを他のデータベースに複製することはできません。CouchDBでドキュメントを「削除」すると、その削除の記録が保存されます。そのデータベースを複製すると、それらの削除はターゲットに反映されます。(CouchDBは、ドキュメントID、その改訂履歴、および削除された状態を示す「トゥームストーン」を格納します。)
それはあなたにとって重要かもしれないし、そうでないかもしれません。最初のアイデアはおそらくより「正しい」と考えられていますが、2番目のアイデアの価値はわかります。プログラム全体を視覚化して、頭の中でこれを実現できます。ほんの数回のクエリで完了です。バッチをループすること_all_docs
も、頭痛の種もありません。あなたの特定の状況はおそらくどちらが良いかを明らかにするでしょう。