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

MongoDBドキュメントからフィールドを完全に削除する方法

MongoDBドキュメントからフィールドを完全に削除する方法

MongoDBでは$unset演算子を使うことで、ドキュメントからフィールドを完全に削除できます。$unsetは単に値を空文字やnullにするのではなく、フィールドそのものをドキュメントから取り除く更新演算子です。

$unset演算子の基本構文

db.yourCollectionName.update({}, {$unset: {yourFieldName:1}}, false, true);

この構文の各引数は次のような意味を持ちます。

  • 第1引数 {}:更新対象を絞り込むクエリ条件(空オブジェクトの場合はすべてのドキュメントが対象)
  • 第2引数 {$unset: {yourFieldName:1}}:削除したいフィールド名を指定(値は通常1を指定)
  • 第3引数 false:upsertオプション(該当ドキュメントがなくても新規作成しない)
  • 第4引数 true:multiオプション(条件に一致するすべてのドキュメントへ一括適用)

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

実際の動作を確認するため、まずサンプルコレクションを作成します。以下のクエリでドキュメントを挿入してください。

>
db.removeFieldCompletlyDemo.insertOne({"StudentName":"Larry","StudentFavouriteSubject":
["Java","C","C++","Python"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ef55a6fd07954a48906a3")
}
>
db.removeFieldCompletlyDemo.insertOne({"StudentName":"Mike","StudentFavouriteSubject":
["Javascript","HTML5","CSS3"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ef57b6fd07954a48906a4")
}
>
db.removeFieldCompletlyDemo.insertOne({"StudentName":"Sam","StudentFavouriteSubject":
["MongoDB","MySQL","SQL Server"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ef59c6fd07954a48906a5")
}

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

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

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

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

{
    "_id" : ObjectId("5c6ef55a6fd07954a48906a3"),
    "StudentName" : "Larry",
    "StudentFavouriteSubject" : [
        "Java",
        "C",
        "C++",
        "Python"
    ]
}
{
    "_id" : ObjectId("5c6ef57b6fd07954a48906a4"),
    "StudentName" : "Mike",
    "StudentFavouriteSubject" : [
        "Javascript",
        "HTML5",
        "CSS3"
    ]
}
{
    "_id" : ObjectId("5c6ef59c6fd07954a48906a5"),
    "StudentName" : "Sam",
    "StudentFavouriteSubject" : [
        "MongoDB",
        "MySQL",
        "SQL Server"
    ]
}

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

それでは、ドキュメントから「StudentFavouriteSubject」フィールドを削除してみましょう。実行するクエリは以下の通りです。

> db.removeFieldCompletlyDemo.update({}, {$unset: {StudentFavouriteSubject:1}}, false, true);
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

実行結果から、3件のドキュメントが条件に一致し(nMatched: 3)、3件すべてが正常に更新された(nModified: 3)ことがわかります。

削除結果の検証

これで「StudentFavouriteSubject」フィールドが削除されました。もう一度find()で全ドキュメントを表示して確認します。

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

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

{ "_id" : ObjectId("5c6ef55a6fd07954a48906a3"), "StudentName" : "Larry" }
{ "_id" : ObjectId("5c6ef57b6fd07954a48906a4"), "StudentName" : "Mike" }
{ "_id" : ObjectId("5c6ef59c6fd07954a48906a5"), "StudentName" : "Sam" }

ご覧のとおり、「_id」と「StudentName」だけが残り、「StudentFavouriteSubject」フィールドはドキュメントから完全に削除されています。

補足:MongoDB 3.0以降ではupdateMany()が推奨

上記のupdate()メソッドは従来からの書き方ですが、MongoDB 3.0以降ではupdateMany()メソッドの使用が推奨されています。multiオプションを明示的に指定する必要がなく、コードがより簡潔になります。

db.removeFieldCompletlyDemo.updateMany({}, {$unset: {StudentFavouriteSubject:1}});

いずれの方法でも、条件に一致するすべてのドキュメントから指定したフィールドを一括で削除できます。用途や環境に合わせて使い分けてください。

  1. Excelの読み取り専用を解除する方法|編集できないときの対処法まとめ

    誰かから受け取ったExcelファイルを編集しようとしたら、「読み取り専用」の通知が表示されて編集できなかった経験はありませんか?実はこの問題には複数の解決策があります。読み取り専用とは、ファイルを閲覧することはできるものの、内容に変更を加えられない状態を指すもので、Excelでは非常によく見られる現象です。 Microsoft Excelの読み取り専用を解除する方法 Excelドキュメントを編集・変更したい場合は、以下のいずれかの方法で読み取り専用属性を解除できます。 「編集を有効にする」ボタンを使用する ファイルを別名で保存する 読み取り専用の推奨設定とパスワードロックを解除する 保護され

  2. Word文書のパスワードを削除・解除する方法【Word 2003〜2016対応】

    Microsoft Wordは、世界中で利用されている最も人気のあるOfficeツールの一つです。充実した編集機能に加えて、ファイル保護機能でも知られています。パスワードが分かっている状態であれば、Wordファイルからパスワードを削除するのはとても簡単です。しかし、パスワードを忘れてしまいファイルにアクセスできなくなった場合でもご安心ください。その解決策も本記事でご紹介します。Word 2007、2010、2013、2016の文書からパスワードを削除する方法はいくつか存在します。 この記事では、Word文書からパスワードを削除する具体的な方法について詳しく解説していきます。 方法1:パスワード