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

配列の最後の要素を使用してコレクションを並べ替える方法

    可能であれば、並べ替える値を常に(double)格納することをお勧めします。配列と2番目のフィールドに配置します。新しい値を配列にプッシュする(または配列を格納する)たびに、「配列の最後の値」に対応する新しいフィールドを追加し、それにインデックスを付けて並べ替えます。以下の例では、これをlastRと呼びました。 :

    { "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR": 3 }
    { "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR": 1 }
    { "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR": 10 }
    { "value" : -3, "r" : [ ] }
    

    インデックスを作成します:

    db.so.ensureIndex({lastR: 1})
    

    そして、使用します:

    > db.so.find().sort({lastR: 1})
    { "_id" : ObjectId("5203a1c83c5438af60de63a1"), "value" : -3, "r" : [ ] }
    { "_id" : ObjectId("5203a1ad3c5438af60de639f"), "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR" : 1 }
    { "_id" : ObjectId("5203a1d33c5438af60de63a2"), "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR" : 3 }
    { "_id" : ObjectId("5203a1b73c5438af60de63a0"), "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR" : 10 }
    

    集計ソリューションを使用するよりもはるかに用途が広く拡張可能です(結果セットに16 MBの制限があり、プロジェクションを処理する必要がある場合に複雑なドキュメントを取得するのがはるかに複雑になります)。



    1. ノードjsをコンパイルすると、`users`モデルを上書きできません

    2. MongoDB/JS-高度なファセット検索-関連するカテゴリ/値のみを取得する方法

    3. JSON配列の多次元配列への変換

    4. KubernetesのMongodbポッドに接続できません(接続が拒否されました)