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

MongoDBでドキュメントを並べ替える3つの方法

    MongoDBには、ドキュメントを特定の順序で並べ替える方法がいくつか用意されています。これらのそれぞれにより、ドキュメントを昇順または降順で並べ替えることができます。

    $textの結果を注文するオプションもあります 検索–計算されたtextScoreによる並べ替え 降順のメタデータ。

    MongoDBでドキュメントを並べ替える3つの方法は次のとおりです。

    cursor.sort() 方法

    cursor.sort() メソッドは、クエリが一致するドキュメントを返す順序を指定します。

    employeesというコレクションがあるとします。 次のドキュメントを使用:

    { "_id" : 1, "name" : "Bob", "salary" : 55000 }
    { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
    { "_id" : 3, "name" : "Fritz", "salary" : 25000 }
    { "_id" : 4, "name" : "Christopher", "salary" : 45000 }
    { "_id" : 5, "name" : "Beck", "salary" : 82000 }
    { "_id" : 6, "name" : "Homer", "salary" : 1 }
    { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
    { "_id" : 8, "name" : "Zoro", "salary" : 300000 }
    { "_id" : 9, "name" : "Xena", "salary" : 382000 }

    これらのドキュメントをsalaryで並べ替えて返す例を次に示します。 昇順のフィールド、およびそれらの_id フィールド:

    db.employees.find().sort( { salary: 1, _id: 1 } )

    結果:

    { "_id" : 6, "name" : "Homer", "salary" : 1 }
    { "_id" : 3, "name" : "Fritz", "salary" : 25000 }
    { "_id" : 4, "name" : "Christopher", "salary" : 45000 }
    { "_id" : 1, "name" : "Bob", "salary" : 55000 }
    { "_id" : 5, "name" : "Beck", "salary" : 82000 }
    { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
    { "_id" : 8, "name" : "Zoro", "salary" : 300000 }
    { "_id" : 9, "name" : "Xena", "salary" : 382000 }
    { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

    ここでは、1を使用しました 昇順。降順で必要な場合は、単に-1を使用します。 代わりに。

    _idを含めた理由 注文のフィールドは、2人以上の従業員が同じ給与を持っている場合、_idであるためです。 フィールドを使用して、それらのドキュメントをそれらの間で並べ替えることができます。

    これは些細なことのように思えるかもしれませんが、クエリを実行するたびにMongoDBがこれらのドキュメントを異なる順序で返すのを防ぎます。

    $textの結果を並べ替えることもできます 探す。 MongoDB sort()を参照してください 例として。

    $sort 集約パイプラインステージ

    集約パイプラインフレームワークを使用する場合は、$sortを使用できます。 すべての入力ドキュメントを並べ替えて、並べ替えられた順序でパイプラインに返すステージ。

    $sortの使用方法は次のとおりです 前の例と同じ結果を返します。ただし、降順で並べ替えましょう。 今回の注文:

    db.employees.aggregate(
       [
         { $sort : { salary : -1, _id: 1 } }
       ]
    )

    結果:

    { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
    { "_id" : 9, "name" : "Xena", "salary" : 382000 }
    { "_id" : 8, "name" : "Zoro", "salary" : 300000 }
    { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
    { "_id" : 5, "name" : "Beck", "salary" : 82000 }
    { "_id" : 1, "name" : "Bob", "salary" : 55000 }
    { "_id" : 4, "name" : "Christopher", "salary" : 45000 }
    { "_id" : 3, "name" : "Fritz", "salary" : 25000 }
    { "_id" : 6, "name" : "Homer", "salary" : 1 }

    $textの結果を並べ替えることもできます 探す。 MongoDB $sortを参照してください 例として。

    $orderBy クエリ修飾子

    $orderBy クエリ修飾子は、2つの形式のいずれかで使用できます。

    このように:

    db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )

    またはこのように::

    db.employees.find()._addSpecial( "$orderby", { salary : 1 } )

    $orderBy クエリ修飾子はmongoで非推奨になりました v3.2以降のシェルですが、とにかくここに含めることにしました。詳細については、MongoDBのドキュメントを参照してください。


    1. 複数のLua状態(マルチスレッド)間でデータを渡す方法は?

    2. sidekiqのジョブの実行時間を短縮します

    3. celery celerybeatはDjangoなしでデータベーススケジューラを使用できますか?

    4. MongoDBデータベースへの接続