Mongodb agregátní $count

0

Otázka

Rád bych, aby spočítat počet dokumentů vrácených pomocí agregace.

Jsem si jistý, že můj prvotní agregace funguje, protože jsem ji použít později v mém programu. Takže jsem vytvořil potrubí proměnné (zde zvané pipelineTest, zeptejte se mě, jestli chcete vidět to v detailu, ale je to docela dlouho, to je důvod, proč nechci dávat linky zde).

Počítat počet dokumentů, vrátil jsem se tlačit můj potrubí s : {$count: "totalCount"}

Nyní bych se rád (nebo přihlásit) totalCount hodnotu. Co mám dělat ?

Tady je agregace :

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

Díky za pomoc, jsem četl hodně a hodně doc o agregaci a pořád nechápu, jak číst výsledek agregace...

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

Nejlepší odpověď

0
  1. Za předpokladu, že jste použití async/await v syntaxi - je třeba vyčkat na výsledek agregace.
  2. Můžete převést kurzor do pole, získat první prvek tohoto pole a získejte přístup k totalCount.
     pipelineTest.push({$count: "totalCount"});   
     cursorTest = await collection.aggregate(pipelineTest, options).toArray();  
     console.log(cursorTest[0].totalCount);
2021-11-23 21:05:41

Díky za vaši odpověď. Hmm, mám-li použít čekají, vrátí tato chyba : `` cursorTest = čekají na sběr.agregátní(pipelineTest, možnosti).toArray(); ^^^^^ SyntaxError: čekají je platná pouze v async funkce ``
Aux98

Pokud nechci používat čekají, jsem dostal tuto chybu : `` (uzel:21748) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'totalCount nedefinovanou (uzel:21748) UnhandledPromiseRejectionWarning: Neošetřené slib, odmítnutí. Tato chyba vznikla buď tím, že hodí uvnitř asynchronní funkce bez bloku catch, nebo odmítnutím slibu, který nebyl zpracován .catch(). Ukončit uzlu procesu na neošetřené slib, odmítnutí ``
Aux98

@Aux98 můžeš zkusit tohle? sbírku.agregátní(pipelineTest, možnosti).toArray().pak(res => console.log(res[0])).catch(err => console.chyba(err))
Sergey Shevchuk

Ano, funguje to takhle, díky za vaši pomoc! I když, .toArray je opravdu pomalý (trvá 5 minut, aby se vrátit výsledek). Jako musím použít tuto funkci 6 krát to by mohl být problém. Ale budu se snažit optimalizovat svůj kód za účelem snížení času. Ještě jednou díky
Aux98
0

Agregace

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

Výsledek

[ { totalCount: 3 } ]

Vaše Údaje

Zkuste následující:

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

Díky za odpověď, konzole návrat : undefined
Aux98

Ale opravdu je to to, co jsem se snažil v první...
Aux98

Ach, musíte být pomocí konkrétního jazyka - zřejmě JavaScript...
barrypicker

Ho, ano, já zapomněl říct, že opravdu je to javascript.
Aux98

V jiných jazycích

Tato stránka je v jiných jazycích

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