温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MongoDB数据库常用表达式有哪些

发布时间:2021-12-17 17:22:29 来源:亿速云 阅读:145 作者:iii 栏目:大数据

本篇内容介绍了“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数据库常用表达式有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI