1

私はこのようなモンゴルのコレクションにいくつかの文書を持っています。Mongo集計機能を使用して、ネストされたグループの合計と小計のパーセンテージを計算するにはどうすればよいですか?

{ 
    "_id" : ObjectId("57e290087139be15d59408c1"), 
    "groupName" : "Registration", 
    "testCases" : [ 
     { 
      "name" : "R1", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R1.1", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R2", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R3", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R4", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R1", 
      "browser" : "Firefox", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R2", 
      "browser" : "Firefox", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R3", 
      "browser" : "Firefox", 
      "status" : "passed" 
     }, 
     { 
      "name" : "R4", 
      "browser" : "Firefox", 
      "status" : "failed" 
     } 
    ] 
} 

    { 
    "_id" : ObjectId("57e2903b7139be15d59408c2"), 
    "groupName" : "Checkout", 
    "testCases" : [ 
     { 
      "name" : "C1", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "C2", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "C3", 
      "browser" : "Chrome", 
      "status" : "failed" 
     }, 
     { 
      "name" : "C4", 
      "browser" : "Chrome", 
      "status" : "passed" 
     }, 
     { 
      "name" : "C1", 
      "browser" : "Firefox", 
      "status" : "passed" 
     }, 
     { 
      "name" : "C2", 
      "browser" : "Firefox", 
      "status" : "passed" 
     }, 
     { 
      "name" : "C3", 
      "browser" : "Firefox", 
      "status" : "passed" 
     }, 
     { 
      "name" : "C4", 
      "browser" : "Firefox", 
      "status" : "failed" 
     } 
    ] 
} 

Mongoの集計機能を使用して、ネストされたグループの合計と小計のパーセンテージを計算するにはどうすればよいですか?

私は

例予想される出力として結果を出力期待してい:あなたは、次の集計操作を実行してみることができます

results: [  
    { 
     "groupName": "Registration", 
     "totalTests": 17, 
     "section": [ 
      { "name": "R1", "totalTests": 17, "sectionCount": 2 } 
     ] 
    } 
] 

答えて

1

db.collection.aggregate([ 
    { "$unwind": "$testCases" }, 
    { 
     "$group": { 
      "_id": null, 
      "testsCount": { "$sum": 1 }, 
      "docs": { "$push": "$$ROOT" } 
     } 
    }, 
    { "$unwind": "$docs" }, 
    { 
     "$group": { 
      "_id": { 
       "groupName": "$docs.groupName", 
       "testName": "$docs.testCases.name" 
      }, 
      "count": { "$sum": 1 }, 
      "testsCount": { "$first": "$testsCount" } 
     } 
    },  
    { 
     "$group": { 
      "_id": "$_id.groupName", 
      "totalTests": { "$first": "$testsCount" }, 
      "section": { 
       "$push": { 
        "name": "$_id.testName", 
        "totalTests": "$testsCount", 
        "sectionCount": "$count" 
       } 
      } 
     } 
    } 
]) 
+1

おかげChridamを。私は、$$ ROOT、$ push、$ firstのような集約関数の助けとなるキーワードはほとんどないことを知りませんでした。これに光を見せてくれてありがとう。 私のクエリは、100行以上のコードから40文字未満に縮小されました。 – Nirmal

関連する問題