MongoDBでフィールドと値を削除する方法:$unset演算子の使い方を解説
MongoDBでは、ドキュメントから特定のフィールド(キー)とその値を削除したい場合に$unset演算子を使用します。この記事では、実際のコマンド例を使いながら、フィールド削除の手順をわかりやすく解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使ってサンプル用のコレクション「deleteFieldDemo」を作成し、3件のドキュメントを挿入します。
> db.deleteFieldDemo.insertOne({"FirstName":"John","LastName":"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb9fb767219729fde21ddad")
}
> db.deleteFieldDemo.insertOne({"FirstName":"David","LastName":"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb9fb837219729fde21ddae")
}
> db.deleteFieldDemo.insertOne({"FirstName":"Carol","LastName":"Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cb9fb8d7219729fde21ddaf")
}
2. コレクション内の全ドキュメントを確認する
次に、find()メソッドを実行して、コレクション内のすべてのドキュメントを表示してみましょう。
> db.deleteFieldDemo.find().pretty();
実行結果は以下の通りです。各ドキュメントに「FirstName」と「LastName」の2つのフィールドが含まれていることが確認できます。
{
"_id" : ObjectId("5cb9fb767219729fde21ddad"),
"FirstName" : "John",
"LastName" : "Smith"
}
{
"_id" : ObjectId("5cb9fb837219729fde21ddae"),
"FirstName" : "David",
"LastName" : "Miller"
}
{
"_id" : ObjectId("5cb9fb8d7219729fde21ddaf"),
"FirstName" : "Carol",
"LastName" : "Taylor"
}
3. $unset演算子でフィールドを削除する
ここからが本題です。update()メソッドと$unset演算子を組み合わせることで、「FirstName」フィールドをすべてのドキュメントから一括削除します。
> db.deleteFieldDemo.update(
... { FirstName: { $exists: true } },
... { $unset: { FirstName: 1 } },
... false,
... true
... );
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
クエリのポイント
- 第1引数(検索条件):
{ FirstName: { $exists: true } }により、「FirstName」フィールドが存在するドキュメントのみを対象にしています。 - 第2引数(更新内容):
{ $unset: { FirstName: 1 } }により、「FirstName」フィールドを削除します。$unsetで指定する値(ここでは「1」)は、実際には何でも構いません。 - 第3引数・第4引数: 第4引数の
trueはmultiオプションで、条件に一致したすべてのドキュメントに対して更新を適用することを意味します。これを指定しない場合、最初に一致した1件しか更新されないので注意が必要です。
実行結果の WriteResult({ "nMatched" : 3, "nModified" : 3 }) から、3件すべてのドキュメントが正常に更新されたことがわかります。
4. 削除結果の確認
最後に、もう一度 find() メソッドを実行して、「FirstName」フィールドが本当に削除されているか確認しましょう。
> db.deleteFieldDemo.find().pretty();
実行結果は以下の通りです。「FirstName」フィールドが消え、「LastName」だけが残っていることが確認できます。
{ "_id" : ObjectId("5cb9fb767219729fde21ddad"), "LastName" : "Smith" }
{ "_id" : ObjectId("5cb9fb837219729fde21ddae"), "LastName" : "Miller" }
{ "_id" : ObjectId("5cb9fb8d7219729fde21ddaf"), "LastName" : "Taylor" }
まとめ
MongoDBでフィールドとその値を削除するには、$unset演算子を使うのが基本です。特に複数ドキュメントをまとめて処理したい場合は、multiオプション(第4引数)を true に設定することを忘れないようにしましょう。なお、MongoDB 4.2以降では updateMany() を使って同様の処理を行うこともできるため、環境に合わせて使い分けるのがおすすめです。
-
【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方
MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド
-
整数と小数が混在するMongoDBフィールドをソートする方法
MongoDBでは、整数値と小数値が混在するフィールドでも、sort()メソッドを使えば数値として正しく並べ替えることができます。この記事では、実際にコレクションを作成し、昇順でソートする手順を具体的なコード例とともに解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使用して、整数と小数が混在するドキュメントを含むコレクションを作成します。 > db.demo755.insertOne({Value:10}); { acknowledged : true, insertedId : ObjectId(5eae9e72a930c785c834e5