2017-01-16 3 views
9

Я использую meteorhacks:aggregate пакет, чтобы сделать агрегацию Mongo в Meteor. Я хочу, чтобы получить количество на последней ступени конвейера, поэтому я использую этот код:

Message.aggregate([ 
    { 
    $match: { 
     // ... 
    } 
    }, { 
    $count: 'count' 
    } 
]); 

Это довольно просто и должно работать, но я только получаю эту ошибку:

Exception while invoking method 'methodname' 
MongoError: Unrecognized pipeline stage name: '$count' 
... 

Пожалуйста, помогите , благодаря.

Обновлено: этот вопрос не дублируется как редактор предложил, мое главное намерение состоит в том, чтобы выяснить, почему я не могу использовать $count

ответ

18

$count доступен в MongoDB версии 3.4. Для предыдущих версий, вам нужно будет использовать $group над постоянным полем.

Message.aggregate([ 
    { 
    $match: { 
     // ... 
    } 
    }, { 
    $group: { 
     _id : null, 
     count : {$sum : 1} 
    } 
    } 
]); 
+0

Спасибо за ваш ответ, хотя это не то, что я ищу. Я хорошо знаю, что я мог бы использовать '$ group', чтобы закончить работу, дело в том, что мне просто интересно, почему я не мог использовать' $ count', несмотря на то, что он существует – Khang

+0

Конвейер агрегации 'count count' был представлен в версии 3.4. Какую версию вы используете? https://jira.mongodb.org/browse/SERVER-27335 – ares

+0

О, я вижу, мой плохой я не заметил, что '$ count' доступен только в 3.4. Большое спасибо, пожалуйста, отредактируйте свой ответ. Я буду отмечать его как правильный ответ – Khang