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

配列の値に基づいてコレクションを並べ替えるにはどうすればよいですか

    すでに試したことがあるかもしれませんが、単純な検索で「ソート」するための「キー」として配列内の特定のアイテムを指定することはできません。このためには、並べ替えるキーを取得するために、aggregateメソッドが必要になります。

    db.exam.aggregate([
    
         # Unwind to de-normalize
         { "$unwind": "$result" },
    
         # Group back to the document and extract each score
         { "$group": {
             "_id": "$_id",
             "result": { "$push": "$result" },
             "useruid": { "$first": "$useruid" },
             "exam_code": { "$first": "$exam_code" },
             "ess_time": { "$first": "$ess_time" },
             "Total": { 
                 "$max": {
                     "$cond": [
                         { "$eq": [ "$result.subject", "Total" ] },
                         "$result.score",
                         0
                     ]
                 }
             },
             "Physics": { 
                 "$max": {
                     "$cond": [
                         { "$eq": [ "$result.subject", "Physics" ] },
                         "$result.score",
                         0
                     ]
                 }
             },
             "Mathematics": { 
                 "$max": {
                     "$cond": [
                         { "$eq": [ "$result.subject", "Mathematics" ] },
                         "$result.score",
                         0
                     ]
                 }
             },
             "Chemistry": { 
                 "$max": {
                     "$cond": [
                         { "$eq": [ "$result.subject", "Chemistry" ] },
                         "$result.score",
                         0
                     ]
                 }
             },
             "Biology": { 
                 "$max": {
                     "$cond": [
                         { "$eq": [ "$result.subject", "Biology" ] },
                         "$result.score",
                         0
                     ]
                 }
             }
         }},
    
         # Sort on those scores
         { "$sort": {
             "Total": -1,
             "Physics": -1,
             "Mathematics": -1,
             "Chemistry": -1,
             "Biology": -1
         }},
    
         # Project final wanted fields
         { "$project": {
             "result": 1,
             "useruid": 1,
             "exam_code": 1,
             "ess_time": 1
         }}
    ])
    

    したがって、ここでは、 $ cond $ max内の演算子 配列を巻き戻した後のステートメント。非正規化されたドキュメントは、配列内のアイテムを表すため、すべて同じ値を持っているわけではないため、テストします。

    これらの抽出されたキーを使用して、ドキュメント全体を再度並べ替え、最終的に不要になったフィールドを破棄できます。




    1. マングース:ミドルウェアpredeleteOneオプションが機能しない

    2. mongoimport中のエラー

    3. MongoDBの配列に埋め込まれたドキュメントを置き換える

    4. 位置のパーセンテージに応じてグループ化して合計MongoDbAggregation