mongoDB进行分组操作

时间:2023-03-09 13:07:47
mongoDB进行分组操作

一、$group 进行分组

1、每个职位的雇员人数:

db.getCollection('emp').aggregate(

[

   {'$group':{

‘_id’:'$job',

job_count:{'$sum':1}

    }

}

]

)

2、每个职位的总工资

db.getCollection('emp').aggregate(

[

   {'$group':{

‘_id’:'$job',

job_salaryt:{'$sum':'$salary'}

    }

}

]

)

3、每个职位的平均工资

db.getCollection('emp').aggregate(

[

      {'$group':{

‘_id’:'$job',

job_salaryt:{'$sum':'$salary'},

job_salary_avg:{'$avg':'$salary'}

                   }

}

]

)

4、每种职位的最高与最低工资

db.getCollection('emp').aggregate(

[

      {'$group':{

‘_id’:'$job',

max_salaryt:{'$max':'$salary'},

min_salary:{'$min':'$salary'}

                   }

}

]

)

5、每个职位的工资

db.getCollection('emp').aggregate(

[

{

‘$group’:{

'_id':'$job',

'salary_data':{'$push':'$salary'}

}

}

]

)

6、每个职位的人员

db.getCollection('emp').aggregate(

[

{

‘$group’:{

'_id':'$job',

'position_name':{'$addToSet':'$name'}  //addToSet,如果有重复的人名,保留一个

}

}

]

)

二、$project 进行数据的规则显示

1、别名

db.getCollection('emp').aggregate(

[

{'$project':{

'_id':0

'职位':'$job',

'name':1

}

}

]

)

2、年薪

db.getCollection('emp').aggregate(

[

{

'$project':{

'name':1,

'salary':{'年薪':{'$multiply':['$salary',12]}}

}

}

]

)

3.判断职位,返回-1 或0

db.getCollection('emp').aggregate(

[

{'$project':{

'_id':0,

'name':1,

'职位':'$job',

'job':{'$strcasecmp':['$job','manager']}

}

}

]

)

三、$macth、$group、$project综合操作

db.getCollection('emp').aggregate(

[

   {  $match:{

     salary:{

{'$gte':1000,'$lte':30000}

     }

   }

},

    {

$project:{

{ '_id':1,

'name':1,

'salary':1,

'job':1

}

}

},

   {

$group:{

{'_id':'$job','count':{'$sum':1},'avg':{'$avg':'$salary'}}

      }

   },

   {sort:{'count':-1}}

]

四、$add ,$sum,$group,$sum,$match,$substr

db.photo.aggregate([{
$match: {
siteId: {
$in: datas.parks
},
'shootOn': {
$gte: minT,
$lte: maxT
}
}
}, {
$project: {
siteId: 1,
shootOn: 1,
locationId: 1,
saleNum: {
$size: '$orderHistory'
}
}
}, {
$group: {
_id: {
year: {
$year: {
$add: ['$shootOn', 28800000]
}
},
month: {
$month: {
$add: ['$shootOn', 28800000]
}
},
day: {
$dayOfMonth: {
$add: ['$shootOn', 28800000]
}
},
location: '$locationId'
},
count: {
$sum: '$saleNum'
}
}
}, {
$project: {
_id: 0,
locationId: '$_id.location',
saleInfo: {
day: {
'$concat': [{
$substr: ['$_id.year', 0, 4]
}, '/', {
$substr: ['$_id.month', 0, 2]
}, '/', {
$substr: ['$_id.day', 0, 2]
}]
},
count: '$count',
}
}
}, {
$group: {
_id: '$locationId',
saleInfo: {
$addToSet: '$saleInfo'
}
}
}])
db.order.aggregate([{
$match: {
siteId: {
$in: parks
},
'payInfo.payTime': {
$gte: minT,
$lte: maxT
},
'orderStatus.status':5
}
}, {
$group: {
_id: {
year: {
$year: {
$add: ['$payInfo.payTime', 28800000]
}
},
month: {
$month: {
$add: ['$payInfo.payTime', 28800000]
}
},
day: {
$dayOfMonth: {
$add: ['$payInfo.payTime', 28800000]
}
},
siteId: '$siteId'
},
count: {
$sum: 1
},
sales: {
$sum: '$charge'
}
}
}, {
$project: {
_id: 0,
count: '$count',
sales: '$sales',
siteId: '$_id.siteId',
day: {
'$concat': [{
$substr: ['$_id.year', 0, 4]
}, '/', {
$substr: ['$_id.month', 0, 2]
}, '/', {
$substr: ['$_id.day', 0, 2]
}]
}
}
}])