7. mongodb 聚合查询
创建时间:2023-02-07 11:11
长度:1202
浏览:0
评论:0
准备数据
use test4;
db.c1.insert({ _id: 1, name: "a", sex: 1, age: 1 });
db.c1.insert({ _id: 2, name: "a", sex: 1, age: 2 });
db.c1.insert({ _id: 3, name: "b", sex: 2, age: 3 });
db.c1.insert({ _id: 4, name: "c", sex: 2, age: 4 });
db.c1.insert({ _id: 5, name: "d", sex: 2, age: 5 });
db.c1.find();
语法
db.集合名.aggregate([
{
管道:{ 表达式 }
},
...
])
例子: 查询男生、女生的总年龄
db.c1.aggregate([
{
$group: {
# _id是固定格式, $sex是字段名
_id: "$sex",
# $result是统计结果的列名,$sum是表达式(参照下面), $age是统计字段
result: { $sum: "$age"},
}
}
])
常用管道
管道名 | 作用 |
---|---|
$group | 将集合中的文档分组,用于统计结果 |
$match | 过滤数据,只要输出符合条件的数据 |
$sort | 聚合数据进一步排序 |
$skip | 跳过指定数据量 |
$limit | 查询集合数据返回的数量量 |
常用表达式
表达式名 | 作用 |
---|---|
$sum | 总和. $sum: 1 和count一样,表示统计 |
$avg | 平均 |
$min | 最小值 |
$max | 最大值 |
例子1: 统计男生、女生的总人数
db.c1.aggregate([
{
$group: {
_id: "$sex",
result: { $sum: 1}
}
}
])
例子2: 求学生总数和平均年龄
db.c1.aggregate([
{
$group: {
_id: null,
total_num: { $sum: 1},
total_age: { $avg: "$age"},
}
}
])
例子3: 查询男生、女生人数,按人数升序
db.c1.aggregate([
{
$group: {
_id: "$sex",
result: { $sum: 1 },
},
},
{
$sort: {
result: 1
}
}
])