Mongodb совокупное количество $

0

Вопрос

Я хотел бы подсчитать количество документов, возвращенных агрегацией.

Я уверен, что моя первоначальная агрегация работает, потому что я использую ее позже в своей программе. Для этого я создал переменную конвейера (здесь она называется pipelineTest, спросите меня, хотите ли вы увидеть ее подробно, но она довольно длинная, поэтому я не даю здесь строк).

Чтобы подсчитать количество возвращенных документов, я нажимаю на свой конвейер с : {$count: "totalCount"}

Теперь я хотел бы получить (или войти) totalCount ценность. Что мне делать ?

Вот агрегация :

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

Спасибо за вашу помощь, я много и много читал документ об агрегации и до сих пор не понимаю, как прочитать результат агрегации...

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

Лучший ответ

0
  1. Предполагая, что вы используете синтаксис async/await - вам нужно дождаться результата агрегации.
  2. Вы можете преобразовать курсор в массив, получить первый элемент этого массива и получить доступ к totalCount.
     pipelineTest.push({$count: "totalCount"});   
     cursorTest = await collection.aggregate(pipelineTest, options).toArray();  
     console.log(cursorTest[0].totalCount);
2021-11-23 21:05:41

Спасибо за ваш ответ. Хм, если я использую await, он возвращает эту ошибку : `` cursorTest = коллекция await.aggregate(конвейерный тест, параметры).toArray(); ^^^^^ Синтаксическая ошибка: ожидание допустимо только в асинхронной функции ``
Aux98

Если я не использую ожидание, я получил эту ошибку : `` (узел:21748) Предупреждение о необработанном обещании: Ошибка типа: Не удается прочитать свойство "Общий счет" неопределенного (узел:21748) Предупреждение о необработанном обещании: Отклонение необработанного обещания. Эта ошибка возникла либо в результате включения асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch(). Чтобы завершить процесс узла при необработанном отклонении обещания ``
Aux98

@Aux98 ты можешь попробовать это? коллекция.агрегат(конвейерный тест, параметры).toArray().затем(res => console.log(res[0])). поймать(ошибка =>> консоль.ошибка(ошибка))>>
Sergey Shevchuk

Да, это работает именно так, спасибо за вашу помощь! Хотя, .toArray действительно медленный (требуется 5 минут, чтобы вернуть результат). Поскольку мне нужно использовать эту функцию 6 раз, это может быть проблемой. Но я постараюсь оптимизировать свой код, чтобы сократить время. Еще раз спасибо
Aux98
0

Агрегация

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

Результат

[ { totalCount: 3 } ]

Ваши Данные

Попробуйте сделать следующее:

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

Спасибо за ответ, консоль вернется : undefined
Aux98

Но на самом деле это то, что я попробовал в первую очередь...
Aux98

Ах, вы, должно быть, используете определенный язык - возможно, JavaScript...
barrypicker

Хо да, я забыл сказать, что это действительно javascript.
Aux98

На других языках

Эта страница на других языках

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