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

mongoの任意のリストでオブジェクトの配列を並べ替える方法

    ネイティブJavaScriptを使用してカスタムコンパレータ関数を実行してみることができます sort() cursor.toArray() 方法:

    var order = ["food", "coffee", "grocery"];
    var docs = db.collection.find().toArray().sort(function(a, b) { 
        return order.indexOf(a.category) - order.indexOf(b.category);
    });
    printjson(docs);
    

    サンプル出力

    [
        {
            "_id" : "4JW7miNITl",
            "category" : "food"
        },
        {
            "_id" : "4Je4kmrrbZ",
            "category" : "coffee"
        },
        {
            "_id" : "4JgAh3N86x",
            "category" : "coffee"
        },
        {
            "_id" : "4JEEuhNIae",
            "category" : "grocery"
        }
    ]
    

    新しいMongoDB3.4バージョンでは、ネイティブのMongoDBオペレーターの使用を活用できるはずです $ addFields および $ indexOfArray > 集約フレームワークで。

    • $ addFields パイプラインステップを使用すると、 $プロジェクト 他のすべての既存のフィールドを知らなくても、既存のドキュメントに新しいフィールドを追加します。
    • $ indexOfArray 式は、指定された配列内の特定の要素の位置を返します。

    したがって、これをまとめると、次の集約操作を試すことができます(MongoDB 3.4を使用):

    var order = ["food", "coffee", "grocery"],
        projection = { 
            "$addFields" : { 
                "__order" : { "$indexOfArray" : [ order, "$category" ] } 
            } 
        },
        sort = { "$sort" : { "__order" : 1 } };
    db.collection.aggregate([ projection, sort]);
    



    1. mongodbで今日の日付範囲のドキュメントを検索する

    2. モジュールソケットが見つかりませんlua

    3. スプリングブートは、mongo-java-drivermaven依存関係を追加するときにmongoに接続しようとします

    4. MongoDB内/からのJavaScriptオブジェクトの保存と取得