MongoDBで2つのキーを基準に重複ドキュメントを削除する方法
MongoDBで2つのキー(フィールド)の組み合わせが重複しているドキュメントを削除したい場合は、aggregate()メソッドを使った集計パイプラインが非常に有効です。この記事では、サンプルコレクションを作成しながら、実際に重複データを取り除く手順をわかりやすく解説します。
1. サンプルコレクションの作成
まず、テスト用のコレクションにドキュメントを挿入します。ここでは demo108 コレクションを使用します。
> db.demo108.insertOne({"Value1":23,"Value2":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2ee3e49fd5fd66da214477")
}
> db.demo108.insertOne({"Value1":23,"Value2":25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2ee3f29fd5fd66da214478")
}
> db.demo108.insertOne({"Value1":23,"Value2":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2ee3f59fd5fd66da214479")
}
2. 挿入したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo108.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e2ee3e49fd5fd66da214477"), "Value1" : 23, "Value2" : 24 }
{ "_id" : ObjectId("5e2ee3f29fd5fd66da214478"), "Value1" : 23, "Value2" : 25 }
{ "_id" : ObjectId("5e2ee3f59fd5fd66da214479"), "Value1" : 23, "Value2" : 24 }
注目すべきは、「Value1: 23 / Value2: 24」という組み合わせが2件存在している点です。これが今回削除したい重複データです。
3. aggregate()で重複エントリを削除するクエリ
以下のクエリを実行すると、Value1とValue2という2つのキーを基準に重複を排除できます。
> db.demo108.aggregate([{ "$sort": { "_id": 1 } },
... {
... "$group": {
... "_id": { "Value1": "$Value1", "Value2": "$Value2" },
... "doc": { "$first": "$$ROOT" }
... }
... },
... { "$replaceRoot": { "newRoot": "$doc" } },
... { "$out": "demo108" }]);
パイプラインの各ステージの役割
- $sort:_idの昇順にドキュメントを並べ替え、どのドキュメントを残すかを決定します。
- $group:Value1とValue2の組み合わせごとにグループ化し、
$firstで各グループの最初のドキュメントを取得します。 - $replaceRoot:グループ化によって変更された構造を、元のドキュメント形式に戻します。
- $out:処理結果を
demo108コレクションに書き戻し、実質的に重複を削除します。
4. 削除後の結果確認
もう一度 find() を実行して、結果を確認しましょう。
> db.demo108.find();
実行結果は以下のとおりです。
{ "_id" : ObjectId("5e2ee3f29fd5fd66da214478"), "Value1" : 23, "Value2" : 25 }
{ "_id" : ObjectId("5e2ee3e49fd5fd66da214477"), "Value1" : 23, "Value2" : 24 }
重複していた「Value1: 23 / Value2: 24」のドキュメントが1件だけ残り、全体が2件になりました。これで、2つのキーを基準とした重複データの削除は完了です。
まとめ
MongoDBで複数キーによる重複を削除するには、$sort → $group($first)→ $replaceRoot → $out の流れで集計パイプラインを組み立てるのが定番のアプローチです。$out を使うと元のコレクションが上書きされるため、本番環境で実行する前に必ずバックアップを取っておくことをおすすめします。
-
iTunesで重複した曲を削除する方法|手動での探し方と整理術を徹底解説
iTunesは便利で楽しい音楽管理ツールですが、長く使い続けるうちにさまざまな問題が発生することがあります。その中でも特によくあるのが、音楽ファイルやその他のオーディオファイルの重複です。重複した曲が増えると、ライブラリの検索や再生に支障が出るだけでなく、Macの貴重なストレージ容量も無駄に消費してしまいます。「iTunesの重複した曲を削除するにはどうすればいいのか?」——本記事では、重複曲を効率的に見つけて削除する方法から、今後の発生を防ぐコツまで詳しく解説します。不要な重複ファイルを定期的に整理すれば、iTunesライブラリを常にクリーンな状態に保てます。デバイスの空き容量が増えるだけで
-
Googleドライブの重複ファイルを見つけて削除する方法【保存版ガイド】
GoogleドライブやOneDriveなどのクラウドストレージを日常的に利用している方にとって、重複ファイルは悩みの種になりがちです。Googleドライブを使えば、スマートフォン、タブレット、パソコンなど、どのデバイスからでもファイルの保存・アップロード・閲覧・編集が可能です。しかし、無料で使える容量には限りがあり、重複ファイルが溜まると貴重なストレージをさらに圧迫してしまいます。 特に複数のデバイス間で同期を行っていると、重複ファイルは頻繁に発生します。ファイル数が多い場合、手作業で重複を探し出すのは時間も労力もかかる大変な作業です。本記事では、Googleドライブ内の重複ファイルの見つけ方