使用MongoDB聚合管道计数文档

问题描述 投票:2回答:2

这是我的源数据的简化版本:

Cars    | Manual     | Petrol
1       | true       | true
2       | true       | false
3       | true       | true
4       | true       | true
5       | false      | true
6       | false      | true

我正在尝试获得此输出:

Total cars: 6
Manual cars: 4
Petrol cars: 5

在MongoDB中使用单个聚合管道可能吗?

mongodb mapreduce aggregation-framework
2个回答
4
投票

是的,您可以通过$ group聚合步骤和$ sum运算符与$ cond结合使用。

db.collection.aggregate([
     $group: {
         _id: null, // we want to group into a single document
         "Total Cars": { $sum: 1 }, // all documents
         "Manual Cars": { 
             $sum : { 
                // add a "1" when Manual is true, otherwise add a "0"
                $cond: [ { $eq: [ "$Manual", true ] }
                    1,
                    0
                ] 
            } 
         },
         "Petrol Cars": { 
             $sum : { 
                $cond: [ { $eq: [ "$Petrol", true ] }
                    1,
                    0
                ] 
            } 
         }
     }
]);
© www.soinside.com 2019 - 2024. All rights reserved.