aggregate 流水线操作
db.集合名.aggregate([
{$match:{key:value}},
{$group:{_id:$分组字段,keyname:{"$sum:1"}}},
{$project:{key1:value1}},
{$sort:{<field>:1}},
{$limit:{<field>:n}},
{$skip:{<field>:n}},
{$out:"集合名"},
])
$project中可以使用的操作符:
拼接字段 $concat
大小写转换 $toUpper
转换为字符串 $toString
$group操作符:
$min和$max
$first和$last
db.集合名.aggregate([
{$bucket:{
groupBy:"$year",
boundaries: [2010,2013,2016,2019 ],
output:{
numMovies:{$sum:1},
avg_Time:{$avg:"$duration"}
}
}
}
])
查找Johnny Depp演的所有电影,按上映年份正序显示年份、演员表、电影名+票房(拼接为一个字符串)
db.movie.aggregate([
{$match:{actors:"Johnny Depp"}},
{$project:
{
_id:0,
year:1,
actors:1,
name_gross:{$concat:["$title","is",{$toString:"$gross"}]}
}
},
{$sort:{year:1}}
])
按照导演将所有的电影分类,统计出每个导演的电影评分的平均值,并评分的平均值从高到低进行排序($avg),并将统计结果导出到集合avg中。
db.movie.aggregate([
{$group:{_id:"$director_name",avg_score:{$avg:"$imdb_score"}}},
{$sort:{avg_score:-1}},
{$out:"avg"}
])
统计2010年后(包含2010),电影的平均时长,每三年一合计。(2010-2013,2013-2016,2016-2019)
db.movie.aggregate([
{$match:{year:{$gte:2010}}},
{$bucket:{
groupBy:"$year",
boundaries: [2010,2013,2016,2019 ],
output:{
numMovies:{$sum:1},
avg_Time:{$avg:"$duration"}
}
}
}
])