MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでコレクション内の全エントリを削除するには?drop()とremove()の違いを解説

MongoDBでコレクション内のすべてのドキュメント(エントリ)を削除したい場合、主に2つの方法があります。drop()メソッドとremove()メソッドです。この2つは似たような動作に見えますが、実際には重要な違いがあります。

  • drop():コレクション自体を丸ごと削除します。コレクションに設定されていたインデックスもすべて失われます。ただし、削除処理自体は非常に高速です。
  • remove():コレクション内の全レコード(ドキュメント)だけを削除し、コレクション本体とインデックスはそのまま保持されます。

それぞれの挙動を、具体的な例を使って確認してみましょう。

drop()メソッドを使用する場合

まず、ドキュメントを含むコレクションを作成します。あわせてインデックスも作成しておきます。

> db.dropWorkingDemo.createIndex({"FirstName":1});
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

> db.dropWorkingDemo.insertOne({"FirstName":"John"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdd8742bf3115999ed511e9")
}

find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。

> db.dropWorkingDemo.find();

実行結果は以下の通りです。

{ "_id" : ObjectId("5cdd8742bf3115999ed511e9"), "FirstName" : "John" }

それでは、drop()を実行してみましょう。

> db.dropWorkingDemo.drop();

実行結果:

True

次に、drop()メソッド実行後にインデックスが残っているかどうかを確認します。

> db.dropWorkingDemo.getIndexes();

実行結果:

[ ]

このように、drop()を使用するとコレクションごと削除されるため、インデックスも完全になくなっていることがわかります。

remove()メソッドを使用する場合

続いて、remove()メソッドの挙動を確認します。同じように、まずコレクションとドキュメントを作成します。

> db.removeDemo.createIndex({"FirstName":1});
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}
> db.removeDemo.insertOne({"FirstName":"John"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cdd8868bf3115999ed511ea")
}

find()メソッドでドキュメントを確認します。

> db.removeDemo.find();

実行結果:

{ "_id" : ObjectId("5cdd8868bf3115999ed511ea"), "FirstName" : "John" }

ここでremove({})を実行して、すべてのドキュメントを削除します。

> db.removeDemo.remove({});
WriteResult({ "nRemoved" : 1 })

remove()メソッド使用後、インデックスが残っているかどうかを確認してみましょう。

> db.removeDemo.getIndexes();

実行結果:

[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.removeDemo"
    },
    {
        "v" : 2,
        "key" : {
            "FirstName" : 1
        },
        "name" : "FirstName_1",
        "ns" : "test.removeDemo"
    }
]

はい、インデックスはそのまま残っています。このことから、remove()はドキュメントのみを削除し、コレクション構造とインデックスを維持することが確認できました。

使い分けのポイント

  • コレクションごと不要になる場合drop()を使うと高速に削除できます。その後再度インデックスを作成すればOKです。
  • コレクション構造やインデックスを維持したまま中身だけ空にしたい場合remove({})が適しています。

なお、MongoDB 3.2以降ではremove()は非推奨となっており、代わりにdeleteMany({})deleteOne()の使用が推奨されています。最新バージョンのMongoDBを利用している場合は、db.collection.deleteMany({})を使うことで同様に全ドキュメントを削除できます。

  1. C#のOrderedDictionaryからすべての要素を削除する方法

    C#のOrderedDictionaryからすべての要素をまとめて削除するには、Clear()メソッドを使用します。Clear()メソッドを呼び出すと、コレクションに格納されたすべてのキーと値のペアが削除され、Countプロパティの値は0に更新されます。なお、Clear()メソッドの計算量はO(n)(nは要素数)です。 例 using System; using System.Collections; using System.Collections.Specialized; public class Demo { public static void Main(){ O

  2. C#のSortedListからすべての要素を削除する方法

    C#のSortedListからすべての要素を一括で削除するには、Clear()メソッドを使用します。このメソッドを呼び出すと、SortedListに格納されているすべてのキーと値のペアが削除され、Countプロパティの値は0になります。例1:Clear()メソッドで全要素を削除する以下のコードでは、10個のキーと値のペアを持つSortedListを作成し、Clear()メソッドですべての要素を削除しています。using System;using System.Collections;public class Demo {   public static void Main(