web-dev-qa-db-ja.com

MongoDBコンパスを使用して、MongoDBのコレクションで選択した複数のレコードを削除する方法

私は、MongoDBとMongoDB Compassを初めて使用します。

顧客コレクションには約1000件のレコードがあります。 MongoDBコンパスを使用してすべてのレコードを一度に削除する方法。

どうもありがとう、

6
anil

そのコレクションにインデックスがない場合は、 docs に示されているように、コレクション全体を削除できます。

ただし、インデックスがある場合、コレクションを削除するとインデックスも削除されますが、通常、remove(db.collection.remove({})を使用してすべてのドキュメントを削除するよりも、すべてを削除してからコレクションとインデックスの両方を再作成する方がはるかに高速です)、ドキュメントごとにドキュメントを移動する必要があるため、必要なスペースを解放し、インデックスのエントリがあれば削除します。

このアプローチの唯一の注意点は、シャードクラスターでコレクションをドロップする可能性があり、ドロップが成功したと報告された場合でも、コレクションが一部のノードに存在し、再作成時に問題が発生する可能性があることです。

このまだOPENの問題とその回避策の詳細については、 https://jira.mongodb.org/browse/SERVER-17397 で確認できます。

問題の概要

シャードクラスターにデータベース/コレクションをドロップすると、ドロップが成功したと報告された場合でも、データベース/コレクションがクラスター内の一部のノードに存在する可能性があります。現時点では、ユーザーがデータベースまたはコレクションを削除してから名前空間を再利用することはお勧めしません。

ユーザーへの影響

特定のノードでデータベース/コレクションが正常に削除されない場合、対応するファイルはそのノードのディスク領域を引き続き使用します。名前空間を再利用しようとすると、未定義の動作が発生する場合があります。

[〜#〜]回避策[〜#〜]

この問題を回避するには、以下の手順に従って、シャード環境でデータベース/コレクションを削除します。

  1. mongosを使用してデータベース/コレクションを削除します。
  2. 各シャードのプライマリに接続し、ネームスペースが削除されたことを確認します。そうでない場合は、ドロップしてください。データベースを削除すると(db.dropDatabase()など)、削除するデータベースのディスク上のデータファイルが削除されます。
  3. mongosに接続し、configデータベースに切り替えて、削除された名前空間への参照をコレクションから削除しますchunkslocksdatabasesおよびcollections

    データベースを削除する場合:

     use config 
     db.collections.remove({_id:/^DATABASE\./})
     db.databases.remove({_id: "DATABASE"})
     db.chunks.remove({ns:/^DATABASE\./})
     db.locks.remove({_id:/^DATABASE\./})
    

    コレクションをドロップする場合:

     use config 
     db.collections.remove({_id: "DATABASE.COLLECTION"})
     db.chunks.remove({ns: "DATABASE.COLLECTION"})
     db.locks.remove({_id: "DATABASE.COLLECTION"})
    
  4. mongosに接続し、 flushRouterConfig を実行します。

2
Danziger