19

特定のビューを作成せずに、設計ドキュメントを除くcouchdbデータベース内のすべてのドキュメントを削除することは可能ですか?

私の最初のアプローチは、_all_docs標準ビューにアクセスし、で始まるドキュメントを破棄すること_designでした。これは機能しますが、大規模なデータベースの場合、ドキュメントを一度に1つずつデータベースから要求する必要があるため(ドキュメントのリビジョンを取得するため)、速度が遅すぎます。

これが唯一の有効なアプローチである場合は、データベース全体を削除して、設計ドキュメントを最初から挿入して最初から作成する方がはるかに実用的だと思います。

4

3 に答える 3

14

私はいくつかのアイデアを考えることができます。

_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も、頭痛の種もありません。あなたの特定の状況はおそらくどちらが良いかを明らかにするでしょう。

于 2012-04-16T16:24:00.880 に答える
2

couchappをインストールし、デザインドキュメントをハードディスクにプルダウンし、布団のデータベースを削除し、デザインドキュメントを再作成したデータベースにプッシュバックします。=)

于 2015-08-06T18:49:16.197 に答える
1

すべてのドキュメントのリストを調べて、デザインドキュメントを除くすべてのドキュメントを1つずつ削除するシェルスクリプトを作成できます。どうやらカウチバッチはそれを行うことができます。そのためにドキュメント全体を取得する必要はなく、IDとリビジョンだけを取得する必要があることに注意してください。

それ以外は、フィルター処理されたレプリケーション(またはJasonSmithによって提案されたレプリケーション)が最善の策だと思います。

于 2012-04-17T04:22:10.390 に答える