Mongodb di aggregazione $count

0

Domanda

Vorrei contare il numero di documenti restituiti da un'aggregazione.

Sono sicuro che il mio iniziale di aggregazione funziona, perchè lo uso più tardi nel mio programma. Per farlo ho creato una pipeline variabile (qui chiamato pipelineTest, mi chiedo se la volete vedere in dettaglio, ma è abbastanza lungo, è per questo che non mi danno le linee qui).

Per contare il numero di documenti restituiti, spingo la mia pipeline con : {$count: "totalCount"}

Ora vorrei ottenere (o registro) totalCount valore. Cosa devo fare ?

Qui è l'aggregazione :

pipelineTest.push({$count: "totalCount"});
        cursorTest = collection.aggregate(pipelineTest, options)
        console.log(cursorTest.?)

Grazie per il vostro aiuto, ho letto molto e molto a doc su di aggregazione e non ho ancora capito come leggere il risultato di un'aggregazione...

aggregate mongodb
2021-11-23 20:45:58
2

Migliore risposta

0
  1. Supponendo che si sta utilizzando async/await della sintassi, è necessario attendere il risultato dell'aggregazione.
  2. È possibile convertire il cursore di una matrice, di ottenere il primo elemento dell'array e l'accesso totalCount.
     pipelineTest.push({$count: "totalCount"});   
     cursorTest = await collection.aggregate(pipelineTest, options).toArray();  
     console.log(cursorTest[0].totalCount);
2021-11-23 21:05:41

Grazie per la tua risposta. Hmm, se io uso attendono, restituisce questo errore : `` cursorTest = attendono collezione.di aggregazione(pipelineTest, opzioni).toArray(); ^^^^^ SyntaxError: attendono è valida solo in funzione async ``
Aux98

Se io non uso attendono, ho ottenuto questo errore : `` (nodo:21748) UnhandledPromiseRejectionWarning: TypeError: Impossibile leggere la proprietà "totalCount' di indefinito (nodo:21748) UnhandledPromiseRejectionWarning: non Gestita promessa di rifiuto. Questo errore originato sia da buttare, all'interno di una funzione async senza un blocco catch, o rifiuto di una promessa che non è stata gestita con .catch(). Per risolvere il nodo del processo su gestita promessa rifiuto ``
Aux98

@Aux98 puoi provare questo? collezione.di aggregazione(pipelineTest, opzioni).toArray().quindi(res => console.log(res[0])).catch(err => console.di errore(err))
Sergey Shevchuk

Sì, funziona così, grazie per il vostro aiuto! Anche se, .toArray è veramente lento (ci vogliono 5 minuti per restituire un risultato). Come ho bisogno di utilizzare questa funzione 6 volte potrebbe essere un problema. Ma cercherò di ottimizzare il mio codice in modo da ridurre il tempo. Grazie ancora
Aux98
0

Aggregazione

db.mycollection.aggregate([
    {
        $count: "totalCount"
    }
])

Risultato

[ { totalCount: 3 } ]

I Tuoi Dati Personali

Provare le seguenti opzioni:

pipelineTest.push({$count: "totalCount"});
cursorTest = collection.aggregate(pipelineTest, options)
console.log(cursorTest.totalCount)
2021-11-23 20:58:33

Grazie per la risposta, la console di ritorno : undefined
Aux98

Ma infatti è quello che ho provato in prima...
Aux98

Ahh, è necessario essere utilizzando un linguaggio specifico - probabilmente JavaScript...
barrypicker

Ho sì mi sono dimenticato di dire che, in effetti si tratta di javascript.
Aux98

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................