MongoDBでソートして特定の件数だけ値を表示するクエリの書き方
MongoDBでのソートと件数制限の基本
MongoDBでドキュメントを並べ替えるには sort() メソッドを使用します。また、表示する件数を絞りたい場合は limit() メソッドを組み合わせます。
この記事では、実際にコレクションを作成し、ソートと件数制限を行う具体的な手順を解説します。
1. サンプルコレクションの作成
まず、insertOne() メソッドを使ってドキュメントを含むコレクションを作成しましょう。
> db.demo254.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e47a0ab1627c0c63e7dba7f")
}
> db.demo254.insertOne({"Name":"Adam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e47a0b01627c0c63e7dba80")
}
> db.demo254.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e47a0b71627c0c63e7dba81")
}2. すべてのドキュメントを表示する
find() メソッドを使うと、コレクション内のすべてのドキュメントを取得できます。
> db.demo254.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e47a0ab1627c0c63e7dba7f"), "Name" : "Chris" }
{ "_id" : ObjectId("5e47a0b01627c0c63e7dba80"), "Name" : "Adam" }
{ "_id" : ObjectId("5e47a0b71627c0c63e7dba81"), "Name" : "Bob" }挿入した順序のまま表示されていることがわかります。
3. sort() で並べ替える
次に、sort() を使って「Name」フィールドを基準に昇順(1 = 昇順、-1 = 降順)で並べ替えてみましょう。
> db.demo254.find().sort({"Name":1});実行結果は以下の通りです。
{ "_id" : ObjectId("5e47a0b01627c0c63e7dba80"), "Name" : "Adam" }
{ "_id" : ObjectId("5e47a0b71627c0c63e7dba81"), "Name" : "Bob" }
{ "_id" : ObjectId("5e47a0ab1627c0c63e7dba7f"), "Name" : "Chris" }アルファベット順に「Adam」「Bob」「Chris」と並び替えられました。
4. sort() と limit() を組み合わせる
ソートした結果から特定の件数だけ表示したい場合は、limit() をチェーンで連結します。以下の例では、上位2件のみを取得しています。
> db.demo254.find().sort({"Name":1}).limit(2);実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e47a0b01627c0c63e7dba80"), "Name" : "Adam" }
{ "_id" : ObjectId("5e47a0b71627c0c63e7dba81"), "Name" : "Bob" }まとめ
MongoDBでは、find().sort({フィールド:1}) で並べ替えを行い、さらに .limit(件数) を組み合わせることで、ソート済みの結果から必要な件数だけを効率的に取得できます。降順にしたい場合は 1 の代わりに -1 を指定してください。大量データから上位N件を取り出す際など、ランキング表示やページネーションの実装にもよく使われるパターンなので、ぜひ覚えておきましょう。
-
MongoDBで配列の要素数をカウントし、新しいフィールドに表示する方法
ドキュメント内の配列要素の数をカウントするには、MongoDBの $size 演算子を使用します。$size は集計パイプライン(aggregate)の中で利用でき、指定した配列フィールドに含まれる要素の総数を数値として返します。ここでは、実際にコレクションを作成しながら、配列要素数をカウントして新しいフィールドに表示する手順を解説します。1. コレクションの作成まず、ドキュメントを挿入してコレクションを作成します。各ドキュメントには科目名を格納する配列フィールド「ListOfSubject」を持たせます。> db.demo703.insertOne({ListOfSubject:[My
-
【MongoDB】$addFieldsで新しいフィールドを追加し、価格を特定の数値で割った結果を連結する方法
MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。本記事では、ネストされた配列内の商品価格(ProductPrice)を特定の数値で割り、その結果を文字列として連結して新しいフィールドに格納する方法を、サンプルコードとともに解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ドキュメントを含むコレクションを作成します。 > db.demo719.insertOne( ... { ... Number:7374644, ... de