MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Agregacja z liczbą poddokumentów spełniających warunek i grupowanie

Powinieneś przeczytać odpowiedź poprawnie, ponieważ istniała już inna alternatywna lista i wyjaśnienie, dlaczego oczekiwany wynik od tego, którego użyłeś, byłby inny.

Zamiast tego potrzebujesz tego, który respektuje możliwe wielokrotne „PASS” lub „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) {

    }
  );

Co jest rodzajem „kombinacji” podejść. Pierwszym z nich jest pobranie „ostatniego” przez runTime zgodnie z oczekiwaniami. Następnym krokiem jest rozbicie tablicy i tym razem „podsumowanie” możliwych przypadków zaliczenia lub niepowodzenia, a nie tylko zapisanie 1 zarówno w przypadku zaliczenia, jak i niepowodzenia w tablicy, liczone jest rzeczywiste „zaliczenie” lub „niepowodzenie”.

Z wynikami:

{
        "_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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB C# Driver 2.0 — dokument aktualizacji

  2. MongoDB filtruje wiele poddokumentów

  3. Symbol wieloznaczny MongoDB w kluczu zapytania

  4. Jak $wyjrzeć, unikając wartości null w agregacie mongodb?

  5. dropDups prawda nie działa mongodb