MongoDBで空のフィールドを削除する方法
MongoDBでは、ドキュメント内の値が空文字列("")になっているフィールドを、updateMany()メソッドと$unset演算子を組み合わせることで一括削除できます。この記事では、実際のコード例を使いながら、空のフィールドを削除する手順をわかりやすく解説します。
1. サンプルコレクションの作成
まず、テスト用に「removeEmptyFieldsDemo」というコレクションを作成し、空文字列を持つドキュメントと通常の値を持つドキュメントを挿入します。
> db.removeEmptyFieldsDemo.insertOne({"StudentName":""});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce92b9578f00858fb12e919")
}
> db.removeEmptyFieldsDemo.insertOne({"StudentName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce92b9878f00858fb12e91a")
}
> db.removeEmptyFieldsDemo.insertOne({"StudentName":""});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce92b9c78f00858fb12e91b")
}
> db.removeEmptyFieldsDemo.insertOne({"StudentName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce92ba078f00858fb12e91c")
}この時点で、4件のドキュメントのうち2件は「StudentName」フィールドが空文字列になっています。
2. 挿入したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.removeEmptyFieldsDemo.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5ce92b9578f00858fb12e919"), "StudentName" : "" }
{ "_id" : ObjectId("5ce92b9878f00858fb12e91a"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5ce92b9c78f00858fb12e91b"), "StudentName" : "" }
{ "_id" : ObjectId("5ce92ba078f00858fb12e91c"), "StudentName" : "Robert" }3. 空のフィールドを削除するクエリ
次に、値が空文字列であるドキュメントを条件として指定し、$unset演算子で該当フィールドそのものを削除します。
> db.removeEmptyFieldsDemo.updateMany({"StudentName": ""}, { $unset : {"StudentName" : 1 }});
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }実行結果を見ると、「matchedCount: 2」「modifiedCount: 2」と表示されており、2件のドキュメントがマッチし、それぞれから空のフィールドが削除されたことがわかります。
ポイント: $unsetはフィールドの値を空にするのではなく、フィールド自体をドキュメントから取り除く演算子です。値に指定する「1」は意味を持たず、構文上必須となっています。
4. 削除後のドキュメントの確認
もう一度find()を実行して、結果を確認しましょう。
> db.removeEmptyFieldsDemo.find();
出力は以下のようになります。
{ "_id" : ObjectId("5ce92b9578f00858fb12e919") }
{ "_id" : ObjectId("5ce92b9878f00858fb12e91a"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5ce92b9c78f00858fb12e91b") }
{ "_id" : ObjectId("5ce92ba078f00858fb12e91c"), "StudentName" : "Robert" }このように、空文字列だった「StudentName」フィールドが完全に削除され、_idのみのドキュメントになっていることが確認できます。値が設定されていた「Chris」と「Robert」のドキュメントはそのまま残ります。
まとめ
MongoDBで空のフィールドを削除するには、以下の手順が有効です。
updateMany()の第1引数で、対象となる条件(例:フィールド値が空文字列)を指定する- 第2引数で
$unset演算子を使い、該当フィールドをドキュメントから削除する - 戻り値の
matchedCountとmodifiedCountで処理件数を確認できる
不要な空フィールドを定期的にクリーンアップすることで、データの整合性が保たれ、インデックスやクエリのパフォーマンス向上にもつながります。
-
MongoDBで2つの配列を$unwindで展開する方法
MongoDBで配列を展開(アンワインド)するには、集計パイプラインの $unwind 演算子を使用します。$unwind は入力ドキュメント内の配列フィールドを分解し、配列の各要素に対して1つのドキュメントを出力します。さらに includeArrayIndex オプションを組み合わせることで、2つの配列の要素をインデックス順にペアリングして取得することも可能です。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo515.insertOne( ... { ... details1: [ ... 4700100004 ..
-
MongoDBで条件に一致する複数のサブドキュメントからフィールドを取得する方法
MongoDBで条件に一致する複数のサブドキュメントからフィールドを取得したい場合、aggregate()メソッドと$unwind演算子を組み合わせて使用するのが効果的です。この記事では、実際のコード例を通じてその手順を詳しく解説します。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo671.insertOne( ... { ... details : [ ... { ... id : 1 ... }, ... { ... CountryName:US, ...