本篇内容介绍了“MongoDB数据库常用表达式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
聚合(aggregate)
简单来说就是将上一次处理的结果交给下一个处理,最后一个处理完输出
我们将每一次的处理叫做管道。
常用管道有:
$group:分组,用于统计结果
$match:用于过滤数据
$project:修改结构,重命名,增加,删除字段,创建计算结果等
$sort:排序
$limit:显示的文档数(显示几行数据)
$skip:跳过前多少数量的文档
$unwind:将数据类型字段拆分
常用表达式
$sum:求和
$avg:平均值
$min:获取最小值
$max:获取最大值
$push:插入一个数组
$first:获取第一个文档数据
$last:获取最后一个文档数据
实例:
# 按照性别分组,并计算有多少人
db.stu.aggregate(
{$group:{_id:"$sex",count:{$sum:1}}}
)
输出:
{ "_id" : "女", "count" : 3 }
{ "_id" : "男", "count" : 3 }
# _id是指定用什么字段分组,需要写成$sex, $sum:1表示此行数据计算为1
# 在上面的基础上计算不同性别的平均值
db.stu.aggregate(
{$group:{_id:"$sex",count:{$sum:1},svg_age:{$avg:'$age'}}}
)
输出:
{ "_id" : "女", "count" : 3, "agv_age" : 22.666666666666668 }
{ "_id" : "男", "count" : 3, "agv_age" : 19.333333333333332 }
# 不进行分组,求所有人的数量和年龄平均值
db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},svg_age:{$avg:'$age'}}}
)
# 在按照性别分组,并计算有多少人,计算不同性别的平均值只取count值
# 并且对count进行重命名为sum,不现实其他
db.stu.aggregate(
{$group:{_id:'$sex',count:{$sum:1},agv_age:{$avg:'$age'}}},
{$project:{sum:'$count',_id:0}}
)
# _id会默认显示,需要需要给个0,其他不写则不显示。
输出:
{ "sum" : 3 }
{ "sum" : 3 }
# 在上述例子中过滤sum大于2的
db.stu.aggregate(
{$group:{_id:'$sex',count:{$sum:1},agv_age:{$avg:'$age'}}},
{$project:{sum:'$count',_id:0}}
{$match:{sum:{$gt:2}}}
)
# 排序
# 按照年龄升序,降序就是-1
db.stu.aggregate(
{$sort:{age:1}}
)
# $limit和$skip
# 查询两条消息
db.stu.aggregate(
{$limit:2}
)
# 跳过前两条,显示两条
db.stu.aggregate(
{$skip:2}
{$limit:2}
)
# $unwind
# 对数组拆分
例如插入一条数据
db.test1.insert({_id:1,size:[111,222,333]})
# 拆分
db.test1.aggregate(
{$unwind:'$size'}
)
会输出:
{"_id":1,"size":111}
{"_id":1,"size":222}
{"_id":1,"size":333}
索引
# 插入1000条数据,在MongoDB中可以执行js脚本的
# 你可以插入更多的数据看到更好的效果
for(i=0;i<1000;i++){db.test.insert({name:"test"+i,age:i})}
# 查询一条数据
db.test.find({name:'test888'})
# 查看查询的时间
db.test.find({name:'test888'}).explain('executionStats')
找到executionTimeMillis,后面就是查询的时间单位是毫秒
# 建立索引
db.test.ensureIndex({name:1})
# 再次执行
db.test.find({name:'test888'}).explain('executionStats')
查看时间,对比没有建立索引时候的时间,差距是很大的。
# 查看当前集合的索引
db.test.getIndexes()
# 删除索引
db.test.dropIndex()
例如:db.test.dropIndex({name:1})
# 建立索引如果不想有重复的值可以指定唯一性
# 爬虫去重复可以利用
db.test.ensureIndex({name:1},{'unique':true})
“MongoDB数据库常用表达式有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/219815.html