sql >> Databasteknik >  >> NoSQL >> MongoDB

Aggregera med antalet underdokument som matchar villkoret och grupperingen

Du borde ha läst svaret ordentligt, eftersom det redan fanns en annan alternativ lista och förklaring till varför det förväntade resultatet du vill ha från det du använde skulle vara annorlunda.

Istället vill du ha den här, som respekterar de möjliga multipla "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) {

    }
  );

Vilket är en slags "kombination" av tillvägagångssätt. Den första är att få den "sista" av runTime som du förväntade dig. Nästa är att bryta ner arrayen och denna gång faktiskt "summa" de möjliga förekomsterna av godkänd eller misslyckad, snarare än att bara spela in en 1 för antingen godkänd eller underkänd i arrayen, räknas själva "godkänd" eller "underkänd".

Med resultat:

{
        "_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. MongoDB remove()

  2. MongoDB $strLenCP

  3. Hur fungerar exemplet med meddelanderäkning i Meteor docs?

  4. Steg för att ansluta MongoDB och Solr med DataImportHandler