MongoDBのaggregate(集計)クエリでソートする方法
MongoDBでデータを並べ替えたい場合、aggregate()メソッドの中で$matchステージと$sortステージを組み合わせることで実現できます。$matchで対象ドキュメントを絞り込み、$sortで任意のフィールドを基準に昇順・降順へ整列させることが可能です。
ここでは、実際にコレクションを作成し、aggregateを使ってソートを行う手順を順番に見ていきましょう。
1. ドキュメントを含むコレクションを作成する
まずはサンプル用のコレクション「demo67」にドキュメントを挿入します。
> db.demo67.insertOne({"StudentAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e289edf602d9a2ff1828ed8")
}
> db.demo67.insertOne({"StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e289ee1602d9a2ff1828ed9")
}
> db.demo67.insertOne({"StudentAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e289ee3602d9a2ff1828eda")
}
2. find()ですべてのドキュメントを表示する
挿入したドキュメントを確認するには、find()メソッドを使用します。
> db.demo67.find();
このコマンドを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e289edf602d9a2ff1828ed8"), "StudentAge" : 23 }
{ "_id" : ObjectId("5e289ee1602d9a2ff1828ed9"), "StudentAge" : 21 }
{ "_id" : ObjectId("5e289ee3602d9a2ff1828eda"), "StudentAge" : 24 }
現時点では、ドキュメントが挿入順に表示されていることがわかります。
3. aggregateでソートを実行する
続いて、MongoDBのaggregateパイプラインでソートを行うクエリを見ていきます。パイプラインの先頭で$matchにより「StudentAge」が20より大きいドキュメントのみを抽出し、続く$sortステージで「StudentAge」を降順(-1)に並べ替えています。
> db.demo67.aggregate([
... {$match: {"StudentAge": {$gt: 20} }}
... ,{$sort: {"StudentAge": -1} }
... ]);
このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e289ee3602d9a2ff1828eda"), "StudentAge" : 24 }
{ "_id" : ObjectId("5e289edf602d9a2ff1828ed8"), "StudentAge" : 23 }
{ "_id" : ObjectId("5e289ee1602d9a2ff1828ed9"), "StudentAge" : 21 }
ご覧のとおり、「StudentAge」の値が大きい順(24 → 23 → 21)にドキュメントが整列されています。
ポイントのまとめ
- $match:条件に一致するドキュメントだけをパイプラインに通すステージです。SQLのWHERE句に相当します。
- $sort:指定したフィールドを基準に並べ替えるステージです。
1で昇順、-1で降順になります。 - $matchを先に配置することで、後段の処理対象ドキュメント数を減らせ、パフォーマンス向上にもつながります。
このように、aggregateのパイプラインでは各ステージの出力が次のステージの入力になるため、$matchと$sortの順序や組み合わせを工夫することで、柔軟かつ効率的なデータ取得が実現できます。
-
MongoDBでネストされた配列を集約する方法:$addFieldsと$mapの活用
MongoDBでネストされた配列を集約するには、aggregate()メソッドを使用します。この記事では、$addFieldsや$mapといった集約パイプラインの演算子を組み合わせて、入れ子構造の配列から特定の条件に合致する要素を抽出する方法を、実際のコード例とともに解説します。サンプルコレクションの作成まず、ネストされた配列を持つドキュメントを含むコレクションを作成しましょう。insertOne()メソッドを使って、ドキュメントを挿入します。> db.demo441.insertOne( ... { ... Name : David, ... Age :
-
MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ
MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..