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操作的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB PHP

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

mongodb关联查询

VSCode 如何操作用户自定义代码片段(快捷键)