MongoDB はクエリ結果をどのように並べ替えるのですか?
sort メソッドは、フィールドとそれに関連付けられた値を 1 つのパラメーターとして受け取ります。 sort メソッドは、{Field: Value} のような JSON 形式のパラメーターを受け入れます。複数のフィールドと値を sort() メソッドに入力して、コレクションからソートされたドキュメントを取得することもできます。データベースに他の多くのドキュメントを挿入した次のドキュメントを考えてみましょう。この MongoDB データベースの名前は「Employees」です。 「従業員」コレクションには、以下に示す従業員のすべての情報が含まれています。
db.Employees.insertMany([{
'名前': 'ロバート',
'DOB': '14-05-1993',
'性別男性'、
'Eメール': ' [メール保護] '、
'部署': 'セキュリティ',
「給料」 : 5000
}、
{
'名前': 'カイル',
'DOB': '31-05-1999',
'性別女性'、
'Eメール': ' [メール保護] '、
'部門': 'IT',
「給料」 : 6200
}、
{
'名前': 'マシュー',
'DOB': '26-04-1993',
'性別男性'、
'Eメール': ' [メール保護] '、
'部門': 'アカウント',
「給料」 : 3500
}、
{
'名前': 'ケビン',
'生年月日': '1991 年 7 月 14 日',
'性別男性'、
'Eメール': ' [メール保護] '、
'部門': 'セキュリティ',
「給料」 : 4500
}、
{
「名前」:「ジュリア」、
'生年月日': '2000 年 9 月 12 日',
'性別女性'、
'Eメール': ' [メール保護] '、
'部門': 'IT',
「給料」 : 2500
}
]))
コレクション「Employee」は、提供されたドキュメントとともに挿入され、その確認は次の出力に示されています。このコレクション ドキュメントを使用して、並べ替えクエリの結果の機能を示します。
例 # 1: MongoDB のソートされていないコレクション
find() メソッドを使用して検索クエリを実行すると、常にソートされていないドキュメントのコレクションが返されます。これは、以下に示すクエリ結果でより明確になります。
>db.Employees.find({},{_id:0})
ここでは、find() メソッドを使用した「Employee」コレクションのクエリがあります。 find() メソッドは、「_id:0」とともに空のパラメーターを受け取ります。より単純な結果を得るために、ドキュメント ID は「_id:0」演算子を使用して削除されます。デフォルトでは、クエリが find() メソッドで検索されると、ソートされていないコレクションが取得されます。以下で取得される出力は、挿入時の方法でソートされていないすべてのドキュメントです。
例 # 2: MongoDB ソート クエリの結果が昇順になる
MongoDB でソートされたコレクションは、find() メソッドの後に配置する必要がある sort() メソッドを使用して取得されます。 MongoDB の sort() メソッドは、フィールド名とドキュメントの並べ替え順序に含まれるパラメーターを取ります。この特定の例ではドキュメントを昇順で取得するため、フィールドにパラメーターとして「1」を入力する必要があります。次の並べ替えクエリでは、結果が昇順になります。
>db.Employees.find().sort({名前:1})
ここでは、find 検索クエリの後に sort() メソッドを使用しています。 sort() メソッドは、指定されたフィールドの隣に値「1」が配置されるため、フィールド「name」を昇順でソートするために使用されます。 sort() メソッドがパラメータ値で指定されていない場合、コレクションはソートされないことに注意してください。 sort() メソッドからの出力は、デフォルトの順序で取得されます。名前フィールドによる昇順の sort() メソッドの結果は、次の MongoDB シェルに表示されます。
例 # 3: MongoDB ソートクエリの結果が降順になる
現在、MongoDB のソート クエリの結果を降順で表示しています。この種のクエリは上記の例と同じですが、1 つの違いがあります。降順の場合、sort() メソッドは列名に対して値「-1」を取ります。降順の並べ替えクエリの結果を以下に示します。
>db.Employees.find({},{'email':1,_id:0}).sort({'email':-1})ここで、検索クエリは、フィールド「email」を検索し、フィールド「email」の値のみを返す find() メソッドで始まります。次に、「email」フィールドをソートするために使用される sort() メソッドを指定しました。その横の値「-1」は、得られたソート結果が降順であることを示します。降順ソートのクエリ結果は、MongoDB シェルで実行した後に取得されます。
例 # 4: 複数のフィールドに対する MongoDB ソート クエリの結果
sort() メソッドを使用して、MongoDB の複数のフィールドを並べ替えることができます。ソートするフィールドは、sort() メソッドで宣言する必要があります。ソートはフィールドの宣言順序に基づいており、ソート順序は左から右に調べられます。複数のフィールドを並べ替えるためのクエリは次のようになります。
>db.Employees.find({},{_id:0}).sort({'name':1,'salary':1})ここでは、並べ替える「名前」フィールドと「給与」フィールドを指定して sort() メソッドが渡されます。 「Employee」コレクションのフィールド「name」は、sort() メソッドの最初の引数フィールドであるため、最初にソートされます。次に、sort() メソッドは、第 2 引数フィールド「salary」をソートします。両方のフィールドの順序は「1」で、並べ替えが昇順であることを示します。並べ替えクエリの複数のフィールドの出力は、以下で指定された並べ替え順序で生成されます。
例 5: Limit メソッドを使用した MongoDB ソート クエリの結果
さらに、sort() メソッドは、その検索クエリによってソートされたドキュメントの制限された数を与える limit() メソッドと組み合わせることもできます。 limit() メソッドには、パラメーターとして整数が必要です。これにより、出力セットに含まれるドキュメントの数が制限されます。検索クエリは、最初にドキュメントを並べ替えてから、指定された制限ドキュメントを提供する下に設定されています。
>db.Employees.find({},{_id:0}).sort({'部署':1,'生年月日':1}).limit(4).pretty()ここでは、sort()メソッドを使用して、「部門」列のソート操作を開始し、次に「生年月日」列の昇順でソート操作を開始する検索クエリがあります。並べ替えが完了したら、制限されたドキュメントを取得するために limit() メソッドをその横に配置しました。 limit() メソッドには数値「4」が与えられます。これは、次の画面に示すように、ソートされた 4 つのドキュメントのみを出力に表示することを意味します。
例 # 6: $sort 集約を使用した MongoDB ソート クエリの結果
上記のすべての例では、MongoDB の sort() メソッドを介してソートを実行しました。 $sort 集約によって実現される MongoDB での別のソート方法があります。 $sort 演算子は、すべての入力ドキュメントを並べ替え、並べ替えられたドキュメントをパイプラインに返します。 $sort 演算子は、以下の「Employees」コレクションに適用されます。
db.Employees.aggregate([ { $sort : { 給与 : 1, _id: -1 } } ])ここでは、「$sort」演算子を使用できる集計メソッドを呼び出しました。次に、「salary」列を昇順で、「id」列を降順でソートする $sort 演算子式があります。フィールドに適用された $sort 集計は、次の結果を出力します。
例 6: Skip メソッドを使用した MongoDB ソート クエリの結果
sort() メソッドは、skip() メソッドと組み合わせることもできます。結果のデータセットには、skip() メソッドを使用して無視される特定の数のドキュメントが含まれる場合があります。 limit() メソッドと同様に、skip() メソッドも、スキップするドキュメントの数を示す数値を受け入れます。並べ替えクエリで、sort() メソッドと skip() メソッドを組み合わせました。
>db.Employees.find({},{_id:0}).sort({'salary':1}).skip(4).pretty()ここでは、sort() メソッドの次に skip() メソッドを使用しました。 sort() メソッドがドキュメントをソートすると、ソート出力が sort() メソッドに渡されます。その後、skip() メソッドによって、ソートされた最初の 4 つのドキュメントがコレクションから削除されました。
結論
この記事は、MongoDB での並べ替えクエリの結果に関するものです。この目的のために、指定された順序でレコードを編成する sort() メソッドを使用しました。また、複数のフィールドにわたる複数の並べ替えに sort() メソッドを使用しました。次に、sort() メソッドを limit() および skip() メソッドと組み合わせて、これらの操作を使用してドキュメントを並べ替えます。さらに、MongoDB でクエリ結果を並べ替えるための $sort 集計を提供しました。