ポイント: MongoDBのsort()メソッドは、指定されたフィールドに基づいてデータを昇順または降順に整理し、クエリの明確さとアクセス性を向上させます。さまざまなデータ型をサポートし、limit()やskip()などのメソッドと組み合わせることができます。
- sort()メソッドは、フィールドと順序を定義するためのパラメータを必要とします。
- ソートは、データセット管理を向上させるために、単一または複数のフィールドに適用できます。
この記事では、MongoDBのsort()メソッドをさまざまなシナリオで使用する方法を示します。特定のデータセットをソートするために他のメソッドと組み合わせて使用する方法も含まれます。
sort()メソッドを使用すると、クエリの可読性が向上し、特定のデータセットの理解が深まります。それだけでなく、ソートされたデータは開発者によってより複雑なアルゴリズムを書くために使用されます。
データベースのソートとは?
データベースのソートは、指定されたフィールドのデータに関連して、データを昇順または降順で表示します。さまざまなデータタイプに対してソート操作を実行できます。
- 文字列
- 整数
- 小数
- その他
ソートの主な利点は、データの可読性と一貫性が向上し、ユーザーがデータセットの意味をより効果的に把握できるようになることです。
MongoDB sort()
MongoDBでは、ソートはsort()メソッドによって行われます。sort()メソッドは、ソートされるフィールドとソート順序という2つの基本的な構成要素から成り立っています。
MongoDBにおけるソート順序は、1(1)またはマイナス(-1)によって定義されます。ここで、正の1は昇順を表し、負の1は降順を表します。
MongoDB sort()の基本構文
db.collection_name.find().sort({field_name: sort order})
公式ドキュメントによると、MongoDBは異なるBSONタイプの値を比較する際に、以下の順序を使用します(BSONはBinary JSONフォーマットを指します)。
これは、MongoDBがドキュメントを保存し、リモートプロシージャコールを行うために使用するシリアル化フォーマットです。ドキュメント内の存在しないフィールドは、Nullオブジェクトとして扱われます。
- MinKey(内部タイプ)
- Null
- 数値(整数、長整数、倍精度、小数)
- シンボル、文字列
- オブジェクト
- 配列
- BinData
- ObjectId
- ブール値
- 日付
- タイムスタンプ
- 正規表現
- MaxKey(内部タイプ)
以下の例では、ソートされていないMongoDB検索クエリとソートされたクエリの違いを示します。この例では、“vehicleinformation”コレクションを使用します。
“vehicleinformation”コレクションデータ
ソートされていないコレクション
find()メソッドで検索クエリを実行すると、デフォルトの動作はソートされていない出力を返すことです。{_id:0}オペレーターは、よりシンプルな出力のためにドキュメントIDを削除するために使用されます。
結果は:
ソートされたコレクション
db.vehicleinformation.find({},{_id:0})
結果は:
ソートされた結果を得るために、検索クエリの末尾にsort()メソッドを追加します(find()メソッド)。これにより、ユーザーはソートされた出力を生成できます。
この場合、データは“year”フィールドで昇順にソートされます。
結果は:
db.vehicleinformation.find({},{_id:0}).sort({"year":1})
結果は:
sort()メソッドに引数を指定しない場合、コレクションはソートされず、結果出力はデフォルトの順序で返されます。これは、Mongoが結果を見つける際の順序です。
結果:
db.vehicleinformation.find({},{_id:0}).sort({})<.pre>
結果:
MongoDB sort()メソッドの使用
このセクションでは、sort()メソッドを使用してさまざまなソート操作を実行する方法を説明します。必要なソートオプションにジャンプしてください:
昇順でのソート
この例では、“make”テキストフィールドを使用して、結果を昇順で取得します。オペレーター1({"make":1})は、昇順を示すために使用され、MongoDBプロジェクションは、他のフィールドをすべて除外するために使用されます。
結果:
db.vehicleinformation.find({},{make:1,_id:0}).sort({"make":1})
結果:
降順でのソート
この例は上記と同じですが、一つの違いは降順を示すためにマイナス1({"make":-1})オペレーターを使用していることです。
結果:
db.vehicleinformation.find({},{make:1,_id:0}).sort({"make":-1})
結果:
複数フィールドでのソート
複数のフィールドをソートする場合、sort()メソッド内でソートされるフィールドを宣言する必要があります。クエリは、フィールドの宣言位置に応じてソートされ、ソート順序は左から右へ評価されます。これを示すために、“vehiclesales”コレクションを使用します。
“vehiclessales”コレクション
結果:
db.vehiclesales.find({},{_id:0})
結果:
次の例では、“make”と“price”フィールドを使ってソートする方法を示します。データは最初に“make”でソートされ、次に“price”フィールドでさらにソートされます。
結果:
db.vehiclesales.find({},{_id:0}).sort({"make":1,"price":1})
結果:
上記のように、データは最初にmakeフィールドでソートされます。同じmake “Audi”を持つ複数のドキュメントがあるため、データは再度価格フィールドで昇順にソートされ、上記の出力が得られます。
limit()メソッドを使ったソート
sort()メソッドは、検索クエリの結果数を制限するlimit()メソッドと一緒に使用できます。limit()メソッドには整数を渡し、結果セットを制限するドキュメントの数を指定します。
次の例では、“vehicleinformation”コレクションを使用し、結果が2つのドキュメントに制限され、昇順および降順でソートされます。
結果:
結果は:
db.vehicleinformation.find({},{_id:0}).sort({"make":1,"year":1}).limit(2).pretty()
結果:
db.vehicleinformation.find({},{_id:0}).sort({"make":-1,"year":-1}).limit(2).pretty()
結果は:
skip()メソッドを使ったソート
sort()メソッドと一緒にskip()メソッドを使用することもできます。skip()メソッドは、結果データセットから指定された数のドキュメントをスキップさせます。
次の例では、最初の4つのドキュメントがスキップされ、昇順で年でソートされていることがわかります。
結果:
db.vehicleinformation.find({},{_id:0}).sort({"year":1}).skip(4).pretty()
結果:
メタデータのソート
sort()メソッドは、計算されたメタデータフィールドのメタデータ値をソートするために使用できます。
次の例では、“food”コレクションを使用して、ドキュメントを“textScore”メタデータを使用してソートする方法を示します。sort()メソッド内のフィールド名は任意であり、クエリシステムはフィールド名を無視します。
“Food”コレクション
結果:
結果:
db.food.find({},{_id:0})
結果:
db.food.find({$text:{$search: "pizza"}}, {score:{$meta: "textScore"}, _id: 0}).sort({sort_example:{$meta: "textScore"}})
結果:
このクエリでは、ソートフィールドを“sort_example”として指定しました。ただし、これは無視され、メタデータがソートされます。さらに、“textScore”メタデータを使用してソートしているため、結果データセットは降順にソートされます。
インデックスを使ったソート
MongoDBは、単一フィールドインデックスで昇順または降順にソート操作を実行できます。複合インデックスでは、ソート順序がインデックスのソート可能性を決定します。ソートキーは、インデックスで定義された順序と同じ順序でリストする必要があります。
たとえば、複合インデックス{make: 1, year: 1}は、“sort({make: 1, year: 1})”を使用してソートできますが、“sort({year: 1, make: 1})”ではソートできません。インデックスを使用したソートは、クエリを実行する際のリソース要件を削減するのに役立ちます。
“vehicleslaes”コレクションを使用して、名前を“make_index”とするインデックスを定義します
結果:
db.vehiclesales.find({},{_id:0}).sort({make_index: 1})
結果:
ここでは、インデックス“make_index”を使用してドキュメントをソートしています。どのインデックスが使用されているかを特定するために、クエリの末尾にexplain()メソッドを追加します。これにより、次の出力が得られます。出力から、関連するドキュメントを取得するために“make_index”が使用されていることを確認できます。
結果:
db.vehiclesales.find({},{_id:0}).sort({make: 1}).explain()
結果:
最後に、explain()メソッドなしでクエリを実行して出力を取得します。
結果:
db.vehiclesales.find({},{_id:0}).sort({make: 1})
結果:
これでMongoDBのソートチュートリアルは終了です。
関連する読書
MongoDBガイド
- MongoDB概要: MongoDBの始め方
- UbuntuとMacにMongoDBをインストールする方法
- MongoDBでデータベースを作成する
- MongoDBシェルの基本コマンド
- MongoDB Compass: Mongo GUIの使用
- MongoDBのロールベースアクセス制御(RBAC)の説明
- MongoDBのプロジェクションとプロジェクションオペレーターの説明
- MongoDBの集約関数の説明
- MongoDBのソート: sort()メソッドと例
- MongoDBでのプッシュとプルオペレーターの使用
- MongoDBの$unwindの使用方法
- 23の一般的なMongoDBクエリオペレーターとその使用法
- MongoDBのGeoLocationクエリ例
- MongoDBトランザクションの紹介
- MongoDBインデックス: トップインデックスタイプとその管理方法
- 知っておくべきMongoDBのトップコマンド
- MongoDBレプリケーション: 完全な紹介
- MongoDBクラスターの設定方法
- MongoDBシャーディング: 概念、例、およびチュートリアル
- MongoDB Atlas: マネージドMongoDBの設定と使用
- MongoDBをDockerコンテナとして実行する方法
- MongoDBのメモリ使用量、管理、および要件
- MongoDBバックアップのためのmongodumpの使用方法
- MongoDBバックアップを復元するためのMongorestore例
- PyMongoの使用方法
- MongoDBとNodeJSのためのMongooseの使用方法
- MongoDBチートシート
- MongoDB対Cassandra: NoSQLデータベースの比較
- PostgreSQL対MongoDB: データベースの比較
- MySQL対MongoDB: データベースの比較
- MongoDB認定: 入門
これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を表すものではありません。