首页 > 数据库技术 > 详细

mongoDB的聚合 aggregate( )

时间:2020-07-26 00:10:14      阅读:109      评论:0      收藏:0      [点我收藏+]

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()

技术分享图片

 2 $project

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

技术分享图片

 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: 给获得的值的字段名

技术分享图片

 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 拆分数组

技术分享图片

 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 统计记录条数, 并起别名

技术分享图片

 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

技术分享图片

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

 

mongoDB的聚合 aggregate( )

原文:https://www.cnblogs.com/yh2020/p/13378599.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!