最近学习nodejs和mongo,当学到appregate的时候感到很困惑,经过一小段时间的学习,大概总结下所学的东西。
首先,先建立数据表
use userinfo
db //userinfo
db.createCollection('user');
首先要插入一些数据:
{
"_id" : ObjectId("588031590d6c56fe957a1d55"), "name" : "lpc", "title" : "html", "price" : 300}{ "_id" : ObjectId("588031630d6c56fe957a1d56"), "name" : "lpc", "title" : "css", "price" : 200}{ "_id" : ObjectId("5880316d0d6c56fe957a1d57"), "name" : "yy", "title" : "css", "price" : 100}接下来查询我们的数据大概看一下:
db.user.find().pretty() //看到输出结果
db.user.aggregate({$project:{username:'$name',userprice:'$price',usertitle:'$title'}},{$group:{_id:'$title',sum:{$sum:1},avg:{$avg:"$userprice"}}}).pretty()
大概解释下这句话的意思:
aggregate的意思是聚合。我们可以通过这个方法来计算数据的和 最大最小值 平均值等
$project:可以对结果集中的键重命名,控制键是否显示(只要不写进去就不会 显示)
$project:{username:'$name',userprice:'$price',usertitle:'$title'}:这句话的意思就是把数据表中的name字段的名称改变成‘username’
当只输入¥project这一命令时,得到的结果如下:
{ "_id" : ObjectId("588031590d6c56fe957a1d55"), "username" : "lpc", "usertitle" : "html", "userprice" : 300 }
{ "_id" : ObjectId("588031630d6c56fe957a1d56"), "username" : "lpc", "usertitle" : "css", "userprice" : 200 }{ "_id" : ObjectId("5880316d0d6c56fe957a1d57"), "username" : "yy", "usertitle" : "css", "userprice" : 100 }$group:分组,聚合,求和,平均数
_id(第一个感觉必须填_id,要不然会报错)
sum:{$sum:1} 根据_id求和,就是计算了title字段内容相同的和
avg:{$avg:"$userprice"} 根据userprice求平均值
输出的结果为:
{ "_id" : "css", "sum" : 2, "avg" : 150 }
{ "_id" : "html", "sum" : 1, "avg" : 300 }