聚合查询格式:
db.getCollection("集合名字").aggregate([ ])
聚合条件语句$match:
db.getCollection("集合名字").aggregate([
{
$match:{sex:4}
}
])
聚合分组语句$group与统计个数count:(_id:null统计整个文档)
db.getCollection("集合名字").aggregate([
{
$group:{
_id:{sex:"$sex"},//分类依据作为_ID
totalIDNumber:{$sum:"$sex"//求和},
count:{$sum:1}//求和1=统计个数
}
}
])
聚合求和语句$sum:
db.getCollection("集合名字").aggregate([
{
$group:{
_id:{sex:"$sex"},
sum:{
$sum:"$sex"
}
}
}
])
聚合求平均语句$avg:
db.getCollection("集合名字").aggregate([
{
$group:{
_id:{sex:"$sex"},
averageQuantity:{
$avg:"$sex"
}
}
}
])
聚合拆数组语句$unwind:
db.getCollection("集合名字").aggregate([
{
$unwind:"$classStudyDetails"
}
])
示例:
→{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }
→db.inventory.aggregate( [ { $unwind : "$sizes" } ] )
→ { "_id" : 1, "item" : "ABC1", "sizes" : "S" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }
聚合字段筛选$project(1为显示,0为不显示,_id默认显示):
db.getCollection("集合名字").aggregate([
{
$project:{
_id:0,
studentName:1,
classStudyDetails:1
}
}
])
聚合限制传递下一阶段文档数语句$limit:
db.getCollection("集合名字").aggregate([
{
$limit:25 ←管道第一阶段,限制25条记录给下面
},
{
$unwind:"$classStudyDetails" ←管道第二阶段
}
])
聚合跳过已给的前x条记录$skip:
db.getCollection("集合名字").aggregate([
{
$skip:25
},
{
$project:{
_id:0,
studentName:1,
}
}
])
聚合排序后传递给下一个管道$sort(1升序,-1降序):
db.getCollection("集合名字").aggregate([
{
$sort:{
sex:-1
}
},
{
$project:{
_id:0,
studentName:1,
classStudyDetails:1,
}
}
])
接下来就用可视化界面模拟java后端实现分页查询:
db.getCollection("集合名字").aggregate([
//分5页每页2条记录
//分a页每页b条记录
//n=0;n<a;n=n+b
//$skip:n
//$limt:b
{
$match:{sex:1}
},
{
$unwind:"$classStudyDetails"
},
{
$skip:0 //2、 4、 6
},
{
$limit:2
},
{
$project:{
studentName:1,
uniqueData:1,
classStudyDetails:{
trainClassName:1,
trainingYearId:1,
openTime:1,
schedule:1,
examScore:1,
qualified:1,
qualifiedTime:1
}
}
},
])
额外说明:我的集合里面的classStudyDetails是一个数组,所以我要unwind一下把这个数组拆开多条记录