mongoDB的聚合 aggregate( )

aggregate( )常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $lookup: 连表查询(返回数组)。
  • $count: 计数。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。

1 $match

语法: db.COLLECTION_NAME.aggregate(options)
db.facilities.aggregate({$match:{name:/楼/}}).pretty()    //效果与下面的find相同, pretty()用来格式化显示查到的数据
db.facilities.find({name:/楼/}).pretty()

mongoDB的聚合 aggregate( )

 2 $project

db.facilities.aggregate([{$match:{name:/楼/}},{$project:{_id:0,name:1,space:1}}]).pretty()    //project中0表示不显示, 1则显示(_id默认显示)

mongoDB的聚合 aggregate( )

 3 $lookup

db.facilities.aggregate([
{$match:{name:/楼/}},
{$project:{_id:0,name:1,space:1}},
{$lookup:{from:spaces,localField:space,foreignField:_id,as:space}}]).pretty()
//from: 要连接的表 //localField: 当前表中的字段 //foreignField: 外表中连接的字段 //as: 给获得的值的字段名

mongoDB的聚合 aggregate( )

 4 $unwind

 db.facilities.aggregate([
{$match:{name:/楼/}},
{$project:{_id:0,name:1,space:1}},
{$lookup:{from:spaces,localField:space,foreignField:_id,as:space}},
{$unwind:$space}]).pretty() //$unwind 拆分数组

mongoDB的聚合 aggregate( )

 5 $count

> db.facilities.aggregate([
{$match:{name:/楼/}},
{$project:{_id:0,name:1,space:1}},
{$lookup:{from:spaces,localField:space,foreignField:_id,as:space}},
{$unwind:$space},
{$count:厕所数量}]).pretty() //$count 统计记录条数, 并起别名

mongoDB的聚合 aggregate( )

 6 $group

db.facilities.aggregate([
{$match:{name:/楼/}},
{$lookup:{from:spaces,localField:space,foreignField:_id,as:space}},
{$unwind:$space},
{$lookup:{from:floors,localField:space.floor,foreignField:_id,as:floor}},
{$unwind:$floor},
{$project:{_id:0,name:1,floor:$floor.name}},
{$group:{_id:$floor,num:{$sum:1}}}]).pretty() //按floor分组, ($sum:1)每有一个加1, 值返回给num

mongoDB的聚合 aggregate( )

 类似于$sum, group 中还有$avg , $min, $max等

 

mongoDB的聚合 aggregate( )

上一篇:oracle存储过程转达梦8存储过程时踩过的坑


下一篇:JDBC概述