MongoDBでコレクションから特定の1つのドキュメントを残して他のドキュメントをすべて削除する方法
MongoDBのコレクションから特定の1つのドキュメントだけを残し、それ以外のすべてのドキュメントを削除するには、条件を指定してremove()メソッドを使用します。この記事では、実際にコレクションを作成しながら、具体的な手順をわかりやすく解説します。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。以下のクエリを実行します。
>db.removeAllDocumentsExceptOneDemo.insertOne({"StudentName":"Larry","StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9c9de42d66697741252478")
}
>db.removeAllDocumentsExceptOneDemo.insertOne({"StudentName":"Mike","StudentAge":21,"StudentCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9c9dea2d66697741252479")
}
>db.removeAllDocumentsExceptOneDemo.insertOne({"StudentName":"Chris","StudentAge":24,"StudentCountryName":"AUS"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9c9def2d6669774125247a")
}
これで「Larry」「Mike」「Chris」という3人の学生情報を持つコレクションが完成しました。
登録されたドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.removeAllDocumentsExceptOneDemo.find().pretty();
実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5c9c9de42d66697741252478"),
"StudentName" : "Larry",
"StudentAge" : 21
}
{
"_id" : ObjectId("5c9c9dea2d66697741252479"),
"StudentName" : "Mike",
"StudentAge" : 21,
"StudentCountryName" : "US"
}
{
"_id" : ObjectId("5c9c9def2d6669774125247a"),
"StudentName" : "Chris",
"StudentAge" : 24,
"StudentCountryName" : "AUS"
}
特定のドキュメント以外を削除する
ここでは、「StudentAge」が24であるドキュメント(Chris)を残し、それ以外のドキュメントをすべて削除します。比較演算子の$ne(not equal/〜以外)を使うことで、「24ではない年齢のドキュメント」を削除対象として指定できます。
> db.removeAllDocumentsExceptOneDemo.remove({ StudentAge: { $ne: 24 } } );
WriteResult({ "nRemoved" : 2 })
「nRemoved : 2」と表示されていることから、2件のドキュメントが正常に削除されたことがわかります。
削除後の結果確認
もう一度すべてのドキュメントを取得して、結果を確認しましょう。以下のクエリを実行します。
> db.removeAllDocumentsExceptOneDemo.find().pretty();
実行すると、目的どおりStudentAgeが24のドキュメント1件だけが残っていることが確認できます。
{
"_id" : ObjectId("5c9c9def2d6669774125247a"),
"StudentName" : "Chris",
"StudentAge" : 24,
"StudentCountryName" : "AUS"
}
補足:新しいバージョンのMongoDBではdeleteMany()が推奨
MongoDB 3.2以降では、remove()メソッドは非推奨(deprecated)となっており、代わりにdeleteMany()メソッドの使用が推奨されています。上記と同じ処理は、以下のように書き換えることができます。
> db.removeAllDocumentsExceptOneDemo.deleteMany({ StudentAge: { $ne: 24 } });
{ "acknowledged" : true, "deletedCount" : 2 }
$ne演算子の考え方は同じなので、環境に合わせて適切なメソッドを選択してください。
-
MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説
MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが
-
Javaを使ってMongoDBコレクションからすべてのドキュメントを取得する方法
MongoDBでは、find()メソッドを使用することで、既存のコレクションからドキュメントを取得できます。この記事では、MongoDBシェルでの基本操作と、Javaプログラムからすべてのドキュメントを取得する手順について詳しく解説します。MongoDBシェルでの構文db.coll.find()各要素の意味は以下のとおりです。db:対象となるデータベースcoll:ドキュメントを取得したいコレクションの名前シェルでの実行例ここでは、MongoDBデータベース内に「students」というコレクションがあり、次のドキュメントが登録されているものとします。{name:"Ram",