sql >> Database teknologi >  >> NoSQL >> MongoDB

Aggreger med antallet af underdokumenter, der matcher betingelsen og grupperingen

Du burde have læst svaret ordentligt, da der allerede var en anden alternativ liste og forklaring på, hvorfor det forventede resultat, du ønsker fra det, du brugte, ville være anderledes.

I stedet vil du have denne, som respekterer de mulige multiple "PASS" eller "FAIL":

  Model.aggregate(
    [
      { "$sort": { "executionProject": 1, "runEndTime": 1 } },
      { "$group": {
        "_id": "$executionProject",
        "suiteList": { "$last": "$suiteList" },
        "runEndTime": { "$last": "$runEndTime" }
      }},
      { "$unwind": "$suiteList" },
      { "$group": {
        "_id": "$_id",
        "suite-pass": { 
          "$sum": {
            "$cond": [
              { "$eq": [ "$suiteList.suiteStatus", "PASS" ] },
              1,
              0
            ]
          }
        },
        "suite-fail": { 
          "$sum": {
            "$cond": [
              { "$eq": [ "$suiteList.suiteStatus", "FAIL" ] },
              1,
              0
            ]
          }
        },
        "runEndTime": {"$first": "$runEndTime"}
      }},
      { "$sort": { "runEndTime": 1 }}
    ],
    function(err,result) {

    }
  );

Hvilket er en slags "kombination" af tilgange. Den første er at få den "sidste" ved runTime, som du havde forventet. Det næste er at nedbryde arrayet og denne gang faktisk "opsummere" de mulige forekomster af bestået eller mislykket, snarere end blot at registrere en 1 for enten bestået eller ikke bestået i arrayet, tælles det faktiske "bestået" eller "ikke bestået".

Med resultater:

{
        "_id" : "Project1",
        "suite-pass" : 0,
        "suite-fail" : 1,
        "runEndTime" : ISODate("2015-08-19T09:46:31.108Z")
}
{
        "_id" : "Project2",
        "suite-pass" : 2,
        "suite-fail" : 0,
        "runEndTime" : ISODate("2015-08-19T11:09:52.537Z")
}
{
        "_id" : "Project3",
        "suite-pass" : 0,
        "suite-fail" : 1,
        "runEndTime" : ISODate("2015-08-19T11:18:41.460Z")
}


  1. Emoji ikke gemt korrekt i mongodb

  2. MongoDB:Sådan omdøbes et felt ved hjælp af regex

  3. Mongodb summer størrelsen af ​​matrixfelter

  4. Garanterer MongoDB journaling holdbarhed?