Mongodb agregate $conta

0

Problema

Aș dori să conta numărul de documente returnate de o agregare.

Sunt sigur inițială de agregare funcționează, pentru că am folosi mai târziu în program. Să fac așa că am creat o conductă variabilă (aici numit pipelineTest, întreabă-mă dacă vrei să-l vezi în detaliu, dar e destul de lung, de aceea nu dau rânduri).

Pentru a contoriza numărul de documente returnate, îmi forțez conducte cu : {$count: "totalCount"}

Acum aș dori pentru a obține (sau jurnal) totalCount valoare. Ce ar trebui să fac ?

Aici este agregare :

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

Multumesc pentru ajutor, am citit mult si multe doc despre agregare și eu încă nu înțeleg cum de a citi rezultatul pe de o agregare...

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

Cel mai bun răspuns

0
  1. Presupunând că sunteți folosind asincron/așteaptă sintaxa - ai nevoie să aștepte pe rezultatul de agregare.
  2. Puteți converti cursorul la o matrice, obține primul element din matrice și acces totalCount.
     pipelineTest.push({$count: "totalCount"});   
     cursorTest = await collection.aggregate(pipelineTest, options).toArray();  
     console.log(cursorTest[0].totalCount);
2021-11-23 21:05:41

Vă mulțumim pentru răspunsul dumneavoastră. Hmm, dacă am folosi așteaptă, se întoarce eroarea asta : `` cursorTest = așteaptă de colectare.agregate(pipelineTest, opțiuni).toArray(); ^^^^^ SyntaxError: așteaptă este valabilă numai în asincron funcția ``
Aux98

Dacă nu utilizați așteaptă, am primit această eroare : `` (nod:21748) UnhandledPromiseRejectionWarning TypeError: nu Poate citi proprietatea 'totalCount' de nedefinit (nod:21748) UnhandledPromiseRejectionWarning: Netratată promit respingere. Această eroare provine, fie prin aruncarea în interiorul unui asincron funcție fără o captură de bloc, sau de a respinge o promisiune care nu a fost manipulat cu .a prinde (de). Pentru a termina nodul proces pe netratată promit respingere ``
Aux98

@Aux98 poți încerca asta? de colectare.agregate(pipelineTest, opțiuni).toArray().apoi(res => consola.log(res[0])).catch(err => consola.eroare(err))
Sergey Shevchuk

Da, este lucru de genul asta, multumesc pentru ajutor! Totuși .toArray este foarte lent (durează 5 minute pentru a returna un rezultat). Ca am nevoie pentru a utiliza această funcție, de 6 ori ar putea fi o problemă. Dar voi încerca să-mi optimizez codul în scopul de a reduce timpul. Multumesc din nou
Aux98
0

Agregare

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

Rezultatul

[ { totalCount: 3 } ]

Datele Dumneavoastră

Încercați următoarele:

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

Multumesc pentru raspuns, consola se întoarcă : undefined
Aux98

Dar, într-adevăr, este ceea ce am încercat în primul rând...
Aux98

Ahh, trebuie să utilizați un limbaj specific - probabil JavaScript...
barrypicker

Ho da, am uitat să-ți spun că, într-adevăr, e javascript.
Aux98

În alte limbi

Această pagină este în alte limbi

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