SELECT DISTINCTをMongoDB distinct()またはAggregateに変換する
SQL SELECT DISTINCTが$groupステージを使用したMongoDB集計パイプラインにマッピングされ、コレクションからユニークな値を取得する方法を学びます。
Basic Queries
詳細な説明
DISTINCTから$groupへ
SQLのSELECT DISTINCTは結果セットから重複行を排除します。MongoDBでは、選択されたフィールドでグループ化する$groupステージを使用した集計パイプラインで実現されます。
SQLの例
SELECT DISTINCT status FROM orders
生成されるMongoDBクエリ
db.orders.aggregate([
{
$group: {
_id: "$status",
status: { $first: "$status" }
}
}
])
代替手段:db.collection.distinct()
単一フィールドのdistinctクエリの場合、MongoDBにはよりシンプルなメソッドもあります:
db.orders.distinct("status")
これはドキュメントではなくユニークな値のプレーン配列を返します。ただし、distinct()は単一フィールドに限定され、16 MBの結果サイズ制限があるため、aggregateアプローチの方がより汎用的です。
複数フィールドのDISTINCT
DISTINCTが複数のカラムに適用される場合、$groupステージは複合_idを使用します:
SELECT DISTINCT category, status FROM products
db.products.aggregate([
{
$group: {
_id: { category: "$category", status: "$status" },
category: { $first: "$category" },
status: { $first: "$status" }
}
}
])
使い分け
単一フィールドの一意性チェックにはdistinct()を使用します。複数フィールドのユニークな組み合わせが必要な場合、または重複排除後に$sortや$matchなどの追加ステージを連鎖させたい場合は、集計パイプラインを使用します。
ユースケース
ECサイトでは、カテゴリ、ブランド、ステータス値のユニーク値でフィルタードロップダウンを作成する必要があることが多いです。SQL DISTINCTクエリの変換は、MongoDBが動的UI生成のためにこれらのユニーク値を効率的に取得する方法を示します。