sql >> データベース >  >> NoSQL >> MongoDB

MongoDB-クエリの結果を並べ替える

    MongoDBでは、limit()を使用して、クエリの結果を並べ替えることができます。 メソッド。

    MongoDBで、db.collection.find()を使用してコレクションをクエリする場合 メソッドには、sort()を追加できます 結果のソート方法を指定するメソッド。 sort() メソッドはカーソルのソート順を指定します。

    sort()を使用する場合 メソッドの場合、パラメーターとしてソート順を指定する必要があります。これは、並べ替え順序を定義するJSONドキュメントである必要があります。通常、1つ以上のフィールドが含まれ、各フィールドの後に1が続きます。 または-1 、並べ替えを昇順にするか降順にするかによって異なります。

    まず、なしでクエリを実行しましょう。 sort()を使用する (自然順を確認できるように):

    sort()なし

    db.musicians.find( )

    結果:

    { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
    { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
    { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
    { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
    

    sort()を使用 昇順

    1の値 フィールド名の横には、指定したフィールドでドキュメントを昇順で並べ替える必要があることを指定します。

    ここでは、結果を名前の昇順で並べ替えます。

    db.musicians.find( ).sort( { name: 1 } )

    結果:

    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
    { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
    { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
    { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
    { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
    

    sort()を使用 降順

    -1の値 フィールド名の横は降順を指定します。

    ここでは、結果を名前の降順で並べ替えます。

    db.musicians.find( ).sort( { name: -1 } )

    結果:

    { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
    { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
    { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
    { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
    { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    

    複数のフィールド

    複数のフィールドで並べ替えることができます。各フィールドをコンマで区切るだけです。これを行うと、ドキュメントは指定された最初のフィールド、次に次のフィールドというように並べ替えられます。

    ここでは、 機器 で並べ替えます フィールドの後に born が続きます 分野。 2人以上のミュージシャンが同じ楽器を演奏する場合、 born フィールドは、それらの方法を決定します 相互に関連してソートされます。

    db.musicians.find( ).sort( { instrument: 1, born: 1 } )

    結果:

    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
    { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
    { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
    { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
    { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
    

    そして、2番目のフィールドが順序にどのように影響するかを確認するために、負の値(降順)に切り替えます。

    db.musicians.find( ).sort( { instrument: 1, born: -1 } )

    結果:

    { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
    { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
    { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
    { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
    

    制限付きで並べ替え

    sort()を使用できます limit()を使用 限定された結果セットの結果を並べ替えます。

    ここでは、結果を3つのドキュメントに制限します:

    db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )

    結果:

    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
    { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
    

    name を切り替えると 降順:

    db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )

    結果:

    { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
    { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    

    この場合、 born 特定の名前に対して複数の結果が存在することはないため、効果はありません。

    異なるタイプの比較

    さまざまなBSONタイプの値を比較する場合、MongoDBは次の比較順序を使用します(低いものから高いものへ)。

    1. MinKey(内部タイプ)
    2. ヌル
    3. 数値(ints、longs、doubles)
    4. 記号、文字列
    5. オブジェクト
    6. 配列
    7. BinData
    8. ObjectId
    9. ブール値
    10. 日付
    11. タイムスタンプ
    12. 正規表現
    13. MaxKey(内部タイプ)

    存在しないフィールドはnull値(または空のBSONオブジェクト)と同じように扱われることに注意してください。


    1. MongoDB $ mul

    2. MongoDB $ setIntersection

    3. WindowsAzureでRedisを使用してアウトプロセスキャッシュを実装する

    4. 複数のIPアドレスでmongod.confbind_ipを設定する方法