MongoDB aggregation $match error: "аргументы должны быть операторами конвейера aggregate"

Я могу получить всю статистику сайта с aggregation но я хочу это для определенного пользователя, например $where.

все характеристики:

games.aggregate([{
                $group: {
                    _id: '$id',
                    game_total: { $sum: '$game_amount'}, 
                    game_total_profit: { $sum: '$game_profit'}}
                }]).exec(function ( e, d ) {

                    console.log( d )            

            })

когда я пытаюсь использовать $match оператор, я получаю ошибку:

games.aggregate([{
                $match: { '$game_user_id' : '12345789' },
                $group: {
                    _id: '$id',
                    game_total: { $sum: '$game_amount'}, 
                    game_total_profit: { $sum: '$game_profit'}}
                }]).exec(function ( e, d ) {

                    console.log( d )            

            })

Arguments must be aggregate pipeline operators

что я упустил?

1 ответов


этапы конвейера являются отдельными документами BSON в массиве:

games.aggregate([
                { $match: { 'game_user_id' : '12345789' } },
                { $group: {
                    _id: '$id',
                    game_total: { $sum: '$game_amount'}, 
                    game_total_profit: { $sum: '$game_profit'}}
                }}
]).exec(function ( e, d ) {
    console.log( d )            
});

Итак, массив или [] скобочная нотация в JavaScript означает, что он ожидает, что будет предоставлен "список". Это означает список "документов", которые обычно указываются в нотации JSON с {} брекеты.