MongoDB操作
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB操作相关的知识,希望对你有一定的参考价值。
MongoDB操作(4)
一.索引的建立
建立索引可以有效提升查询速度
1.创建索引
- 先不加索引做一个测试,将10万条数据插入到数据库里
for(i=0;i<100000;i++){db.t255.insert({name:'test'+i,age:i})}
经过一段时间:
数据插进去了,就可以进行查询数据的测试了:
db.t255.find({name:"test99000"})
有肉眼可见的卡顿
可以看用.explain('executionStats')
花了多少时间,进行查询性能分析:
db.t255.find({name:"test99000"}).explain('executionStats')
共花了45毫秒来查询那一条数据
- 下面开始加入索引
建立索引的语法
db.集合.ensureIndex({属性:1}),1表示升序,-1表示降序
1、-1对sort略有影响,其他时候影响不大
将name作为索引
db.t255.ensureIndex({name:1})
成功建立索引:
"numIndexesBefore" : 1, "numIndexesAfter" : 2,
可以看出,建立索引之前有1个索引,建立索引之后有2个
其实,建立索引之前的默认索引就是
_id
现在重新进行那一条数据的查询及计时
db.t255.find({name:"test99000"}).explain('executionStats')
此时耗时几乎为0毫秒!
创建唯一索引
默认情况下索引字段的值可以相同
比如允许多个name=‘a’
但有时要求索引的值唯一,那就要创建唯一索引
语法:db.集合.ensureIndex({属性:1},{"unique":"true"}),1表示升序,-1表示降序
可以达到数据去重的目的
比如爬虫把url设为唯一索引,第二次再爬到这个url地址的时候,数据就不会重复插入进去
可有的时候,只将一个字段设为索引,无法满足要求
如贴吧数据,可能要贴吧名称,发帖人,发帖时间,三个字段组合到一起
联合创建索引
通过多个字段来判断一条数据的唯一性的时候就建立联合索引
2.查看当前集合中所有索引
语法: db.集合名称.getIndexes()
db.t255.getIndexes()
3.删除索引
语法: db.集合名称.dropIndex({索引名称:1})
那里是1或-1
db.t255.dropIndex({name:1})
二.索引在爬虫去重方面的应用
-
使用数据库建立关键字段(一个或者多个)建立索引进行去重
-
根据url去重
- url地址对应的数据不会变的情况,url地址能够唯一判别一条数据的情况
- 上一次已经爬过,下次一次就不用爬,那关键就是判断爬没爬过
- 下一次爬的时候判断url是否在集合里,在的话就是爬过,没有就是没爬过
-
根据数据本身进行去重
以上是关于MongoDB操作的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
VSCode自定义代码片段15——git命令操作一个完整流程
ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项