sql >> Database >  >> NoSQL >> MongoDB

Samenvoegen met aantal subdocumenten die overeenkomen met de voorwaarde en groepering

Je had het antwoord goed moeten lezen, want er was al een andere alternatieve lijst en uitleg waarom het verwachte resultaat dat je wilt, anders zou zijn dan het resultaat dat je hebt gebruikt.

In plaats daarvan wil je deze, die het mogelijke meervoud "PASS" of "FAIL" respecteert:

  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) {

    }
  );

Dat is een soort "combinatie" van benaderingen. De eerste is om de "laatste" door runTime te krijgen zoals je verwachtte. De volgende is om de array op te splitsen en deze keer de mogelijke gevallen van geslaagd of mislukt te "samenvatten", in plaats van alleen een 1 op te nemen. voor ofwel slagen ofwel mislukken in de array, worden de daadwerkelijke "pass" of "fail" geteld.

Met resultaten:

{
        "_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:Query een json-object genest in een array

  2. nodejs krijg resultaten in mongodb

  3. Verkort MongoDB ID in javascript

  4. FindAndUpdate Controleren of het document echt is bijgewerkt