目录
一、Mongo概述
二、安装&下载
1.下载:
2.安装
三、基本命令
插⼊数据
查询数据
修改数据
删除数据
索引
四、Python与MongoDB交互
1.安装pymongo
2.使⽤
一、Mongo概述
-
MongoDB是什么?
MongoDB是⾮关系型数据库(No sql)
-
为啥需要学习MongoDB?
-
企业需求
-
爬⾍爬取数据到⼀个量级 使⽤MongoDB⽐mysql好⼀些
-
-
MongoDB特点
-
⽆数据结构(⽅便爬⾍)
-
(具有⾮常⾼读写能⼒)
-
良好的⽀持 (完善⽂档,跨平台,稳定)
-
二、安装&下载
1.下载:
官网:MongoDB: The Developer Data Platform | MongoDB
2.安装
安装步骤:
双击安装文件
点击下一步
勾选并点击下一步
安装方法:默认安装会默认安装到C盘,不能修改安装路径
这里我选择自定义安装
自定义安装路径
默认即可
取消勾选,并点击下一步
如果不取消勾选,会自动安装一个软件:用来管理此数据库的程序,当由于是从国外网站下载程序,速度会很慢,为避免安装过程中出现问题,我们就取消勾选。
点击安装
等待安装完成即可。
三、基本命令
SQL概念 | MongoDB概念 | 解释 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 字段/域 |
index | index | 索引 |
primary key | primary key | 主键 |
show dbs # 查看数据库
cls 清屏命令
use mark # 使⽤数据库/创建数据库
db # 查看当前正在使⽤数据库名称
show collections/tables # 查看当前数据库下的集合 --- 表
db.dropDatabase() # 删除当前正在使⽤的数据库
插⼊数据
insert()
-
不⼿动创建表(当前没有这个表,插⼊⼀条数据,表⾃动创建)
db.demo1.insert({x:1})
-
⼿动创建表
db.createCollection(name,option) name:创建集合名称 option:⼀个字典 指定创建集合的配置 capped: 默认False 没设置上限 True 设置上限 size: 表示设置上限的⼤⼩ 字节 如果设置⼤⼩<256 默认为256 max: number 指定上限集合的最⼤允许的⽂档数量 (最⼤⾏数) # 超过范围数据会被覆盖 # 例⼦ db.createCollection('demo1',{capped:true,size:5000,max:4}) # 检测当前集合有没有设置上限 false没有 true有 db.mark.isCapped()
-
插⼊多条数据
db.demo1.insert([{name:'小泽',age:20,addr:'南京'},{name:'小超',age:20,addr:'南京'}]) for(i=3;i<10;i++)db.demo1.insert({x:i})
save()
# 指定id 找到就更新 没找到插⼊
db.demo1.save({_id:1,name:'小马'})
查询数据
find()
-
查询mark集合内所有数据
db.demo1.find()
-
精确查询
db.demo1.find({addr:'徐州'})
-
格式化显示查询结果
db.demo1.find({addr:'徐州'}).pretty()
-
符合条件的第⼀条数据
db.demo1.findOne({addr:'徐州})
-
多条件查询
db.demo1.findOne({addr:'徐州',name:'小义'})
操作查询结果
-
查询集合⾥数据个数
db.demo1.find().count() db.demo1.count()
-
查询符合条件数据个数
db.demo1.find({addr:'徐州'}).count() db.demo1.count({addr:'徐州'})
-
查询前⼏条数据 限制条件 不分负号
db.demo1.find().limit(2) db.demo1.find().limit(-2)
-
跳过⼏条数据
db.demo1.find().skip(2)
-
查询age>19数据
db.demo1.find({age:{$gt:19}})
等于:默认是等于判断,没有运算符
⼩于:$lt
⼩于等于:$lte
⼤于:$gt
⼤于等于:$gte
不等于:$ne
-
⾃定义查询
db.demo1.find({$where:function(){return this.age > 19;}})
如果age对应的值是字符串类型的,也能筛选出来,而db.demo1.find({age:{$gt:19}})这种方法就筛选不出来
-
映射:返回指定字段,如果为1 返回该字段,_id列默认显示
2个字典分别代表的含义:
-
显示行
-
显示列
db.mark.find({},{age:1}) db.mark.find({},{age:1,_id:0})
-
-
排序
# 按照年龄升序 db.mark.find().sort({age:1}) # 按照年龄降序 db.mark.find().sort({age:-1})
拓展:正则查询
# 查询英文、数字类型的数据
db.demo1.find({name:{$regex:'\\w'}})
# 查询中文类型的数据
db.demo1.find({name:{$regex:'\u4e00-\u9fa5'}})
修改数据
update()
三个字典分别代表的含义:
-
query:查询条件
-
update: 更新的内容
-
multi:默认false 表示更新第⼀个符合条件的数据 true 把所有满⾜条件的数据进⾏更新
-
正常更新 其余字段不保留
db.demo1.update({name:'小义'},{name:'小毅'})
-
指定字段更新 保留其余字段
db.demo1.update({name:'小强'},{$set:{name:'小弱'}})
-
符合条件全部进⾏更新
db.demo1.update({addr:'南京'},{$set:{addr:'江宁'}},{multi:true})
删除数据
remove()
-
删除集合名
db.demo2.drop()
-
删除集合下所有数据
db.demo2.remove({})
-
删除符合条件的数据
# 删除符合条件的所有数据 db.demo1.remove({addr:'江宁'}) # 删除符合条件的第n条数据 # justOne # justTwo # justThree #..... # 只有justOne生效,其余都是删除匹配到的所有数据 db.demo1.remove({addr:'徐州'},{justOne:true})
-
delete效率⽐remove⾼
db.mark.deleteOne({age:96}) db.mark.deleteMany({age:18})
索引
更快
-
插⼊示例数据
for(i=0;i<100000;i++){db.test.insert({name:'test'+i,age:i})}
运行之后可以看到光标一直在闪,是因为想要插入的数据太多,程序一直在运行中,一段时间之后就会运行完成
我们查看一下插入的数据,发现只能看到20条数据
可以查看更多数据
-
创建索引前
db.test.find({name:'test9999'}) db.test.find({name:'test9999'}).explain('executionStats')# 40ms
-
创建索引
db.test.ensureIndex({name:1}) # name字段作为索引
-
创建索引后
db.test.find({name:'test9999'}).explain('executionStats') # 12ms
-
查看集合
db.test.getIndexes()
-
删除索引
db.test.dropIndex({name:1})
-
默认情况下 _id 是集合的索引
四、Python与MongoDB交互
1.安装pymongo
pip install pymongo -i https://pypi.douban.com/simple
2.使⽤
插入
import pymongo
# 创建链接
conn = pymongo.MongoClient()
conn['data']['demo1'].insert_one({'x':'1'})
import pymongo
# 创建链接
conn = pymongo.MongoClient()
# conn['data']['demo1'].insert_one({'x':'1'})
conn['data']['demo1'].insert_many([{'x':'2'},{'x':'3'}])
查询
import pymongo
# 创建链接
conn = pymongo.MongoClient()
# conn['data']['demo1'].insert_one({'x':'1'})
# conn['data']['demo1'].insert_many([{'x':'2'},{'x':'3'}])
res = conn['data']['demo1'].find()
for i in res:
print(i)
运行结果: