MongoDb聚合查询的场景

1,group后数据汇总到数组和集合

db.employees.aggregate(
 [
   {
     $group: {
       '_id': null, 
        'arrayPush': {$push: '$age'},
        'arraySet': {$addToSet: '$age'}
      }
    }
  ]
);
在分组时使用$push 可以将一个指定的字段元素加入到数组中,而使用 $addToSet 则会加入到集合中。二者的区别在于集合元素不可重复。

2.group后取收尾元素

db.employees.aggregate(
 [
   {
     $group: {
       '_id': '$dept',
        'last': {$last: '$name'},
        'first': {$first: '$name'}
      }
    }
  ]
);

3.group后取最大值最小值

# 求全部员工中的最小和最大年龄
db.employees.aggregate(
 [
   {$group: {
     '_id': null, 
      'minAge': {$min: '$age'},
      'maxAge': {$max: '$age'}
     }
   }
  ]
);

4.group后求取平均值

db.employees.aggregate([
 {
   $group: {
     '_id': '$dept', 
      'numOfEmployee': {$sum: 1}, 
      'avgExp':{$avg: '$totalExp'}
     }
   }
]);
$sum 可以对指定字段进行求和,$avg 用于取平均值

5. $project字段筛选

使用$project 操作符可以指定返回哪些字段,其中标记为1的返回,未标记或为0的不返回,但_id 默认返回,除非显示指定不返回_id。
# 只返回_id,name和 dept 字段
db.employees.aggregate({$project: {'name': 1, 'dept': 1}});
# 只返回name和 dept 字段
db.employees.aggregate({$project: {'_id': 0, 'name': 1, 'dept': 1}});
# $match 和$project 组合使用
db.employees.aggregate([{$match: {dept: '研发部'}},{$project: {'name': 1, 'dept': 1}}]);

You May Also Like

About the Author: daidai5771

发表评论

电子邮件地址不会被公开。 必填项已用*标注