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

Aggregazione MongoDB:come ottenere il conteggio totale dei record?

Dalla v.3.4 (credo) MongoDB ha ora un nuovo operatore della pipeline di aggregazione chiamato "facet" che nelle loro stesse parole:

Elabora più pipeline di aggregazione all'interno di una singola fase sullo stesso set di documenti di input. Ciascuna pipeline secondaria ha il proprio campo nel documento di output in cui i risultati vengono archiviati come una matrice di documenti.

In questo caso particolare, ciò significa che si può fare qualcosa del genere:

$result = $collection->aggregate([
  { ...execute queries, group, sort... },
  { ...execute queries, group, sort... },
  { ...execute queries, group, sort... },
  {
    $facet: {
      paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
      totalCount: [
        {
          $count: 'count'
        }
      ]
    }
  }
]);

Il risultato sarà (con per ex 100 risultati totali):

[
  {
    "paginatedResults":[{...},{...},{...}, ...],
    "totalCount":[{"count":100}]
  }
]