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

MongoDBでキー(フィールド)を削除する方法|$unset演算子の使い方を解説

MongoDBの$unset演算子とは

MongoDBでドキュメントから特定のキー(フィールド)を削除したい場合は、$unset 演算子を使用します。$unsetは、指定したフィールドをドキュメントから完全に取り除くための更新演算子です。値をnullに書き換えるのではなく、フィールドそのものが存在しない状態になります。

この記事では、サンプルコレクションを作成し、実際に$unset演算子を使って「StudentAge」フィールドを削除する手順を順番に解説します。

1. サンプルコレクションの作成

まず、insertOne()メソッドを使ってテスト用のコレクションにドキュメントを挿入します。

> db.removeKeyFieldsDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Doe","StudentAge":23});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc6c8289cb58ca2b005e672")
}
> db.removeKeyFieldsDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith","StudentAge":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc6c8359cb58ca2b005e673")
}

2件のドキュメントが正常に挿入されました。それぞれ「StudentFirstName」「StudentLastName」「StudentAge」の3つのフィールドを持っています。

2. 挿入したドキュメントの確認

find()メソッドとpretty()を組み合わせて、コレクション内のすべてのドキュメントを見やすい形式で表示します。

> db.removeKeyFieldsDemo.find().pretty();

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

{
    "_id" : ObjectId("5cc6c8289cb58ca2b005e672"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Doe",
    "StudentAge" : 23
}
{
    "_id" : ObjectId("5cc6c8359cb58ca2b005e673"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Smith",
    "StudentAge" : 21
}

両方のドキュメントに「StudentAge」フィールドが存在していることが確認できます。

3. $unset演算子でフィールドを削除する

ここからが本題です。updateMany()メソッドと$unset演算子を組み合わせることで、条件に一致するすべてのドキュメントから指定フィールドを一括削除できます。第1引数に空のクエリ {} を渡すと、コレクション内の全ドキュメントが対象になります。

> db.removeKeyFieldsDemo.updateMany({},{$unset:{StudentAge:1}});
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

実行結果の「matchedCount: 2」「modifiedCount: 2」は、2件のドキュメントが該当し、2件とも更新(フィールド削除)が成功したことを意味します。

$unsetの構文ポイント:

  • {$unset: {フィールド名: 1}} のように記述します。値は「1」(または空文字列)であれば何でも構いません。
  • 複数のフィールドを同時に削除することも可能です。例:{$unset: {StudentAge: 1, StudentLastName: 1}}
  • ネストされたフィールドを削除する場合は、ドット表記("親.子": 1)を使用します。

4. 削除後のドキュメントを確認

再度find()メソッドを実行して、フィールドが正しく削除されたか確認しましょう。

> db.removeKeyFieldsDemo.find().pretty();

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

{
    "_id" : ObjectId("5cc6c8289cb58ca2b005e672"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Doe"
}
{
    "_id" : ObjectId("5cc6c8359cb58ca2b005e673"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Smith"
}

両方のドキュメントから「StudentAge」フィールドが完全に削除されました。このように$unset演算子を使えば、MongoDBのキー(フィールド)を簡単かつ安全に削除できます。

補足:単一ドキュメントのみを対象にしたい場合

すべてのドキュメントではなく、特定の1件だけフィールドを削除したい場合は、updateMany()の代わりにupdateOne()を使用します。また、条件を指定すれば該当するドキュメントのみを更新できます。例えば以下のように書きます。

> db.removeKeyFieldsDemo.updateOne(
...   { StudentLastName: "Doe" },
...   { $unset: { StudentAge: 1 } }
... );

MongoDB 4.2以降では、古いupdate()メソッドは非推奨となっているため、用途に応じてupdateOne()またはupdateMany()を使い分けるのがベストプラクティスです。

  1. MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説

    MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが

  2. スケルトンキー(Skeleton Key)の削除方法|企業ネットワークを狙うトロイの木馬への対処法

    企業ネットワークには、強固なセキュリティ対策と予防策を今すぐ導入すべき時が来ています。なぜなら、現在企業ネットワークを標的とする既知のマルウェアが存在するからです。その名は「スケルトンキー(Skeleton Key)」です。スケルトンキーとは?スケルトンキーは、企業ネットワークに属するセキュリティ対策が不十分なWindowsコンピューターを攻撃する危険なトロイの木馬です。専門家によると、この感染は主にシングルファクター認証(SFA)を利用しているシステムを狙う傾向があります。SFAとは、ワンステップのログインで完結する認証方式のことです。この方式では、ユーザーはアカウントにログインする際、ユー