0

Mongo にコレクションがあります。コレクション名が「invoices」であるとします。_id の値はスクリプトによって生成されます (デフォルトの mongo ID オブジェクトではありません)。_id のタイプは文字列です。

_id がすべて数値文字列であるすべてのレコードを検索したい。「3434349898」のような文字列を意味します

これはクエリで実行できますか?

最終的な目標は、そのようなレコード (_id の数値を持つもの) をすべて削除し、非数値のみを残すことです。したがって、「a234」または「4898c」はコレクションに残す必要がありますが、数字のみの値は削除する必要があります。

これが 1 つのクエリで実行できない場合、これらのレコードをループで削除するのに最適なクエリは何ですか? この条件に一致するレコードは、約 50 万件、または全レコードの約 150 万件である可能性があります。

4

1 に答える 1

5

のタイプは_id文字列であるため、次のように正規表現を使用して、ID が数字のみを含む文字列であるドキュメントを削除できます。

db.coll.remove({"_id":/^[0-9]*$/})

「coll」は、更新するコレクションの名前です。

正規表現は_idフィールドの最初の文字を使用するため、インデックスを使用できるようになり、かなり高速になるはずです。ドキュメントを削除する前に最初にドキュメントを調べたい場合は、同じクエリ ドキュメントをfind().

于 2013-09-17T22:37:36.470 に答える