赞
踩
目录
MongoDB是什么?
MongoDB是⾮关系型数据库(No sql)
为啥需要学习MongoDB?
企业需求
爬⾍爬取数据到⼀个量级 使⽤MongoDB⽐mysql好⼀些
MongoDB特点
⽆数据结构(⽅便爬⾍)
(具有⾮常⾼读写能⼒)
良好的⽀持 (完善⽂档,跨平台,稳定)
官网:MongoDB: The Developer Data Platform | MongoDB
安装步骤:
双击安装文件
点击下一步
勾选并点击下一步
安装方法:默认安装会默认安装到C盘,不能修改安装路径
这里我选择自定义安装
自定义安装路径
默认即可
取消勾选,并点击下一步
如果不取消勾选,会自动安装一个软件:用来管理此数据库的程序,当由于是从国外网站下载程序,速度会很慢,为避免安装过程中出现问题,我们就取消勾选。
点击安装
等待安装完成即可。
SQL概念 | MongoDB概念 | 解释 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 字段/域 |
index | index | 索引 |
primary key | primary key | 主键 |
- show dbs/databases # 查看数据库
- cls # 清屏命令
- use mark # 使⽤/切换数据库/创建数据库
- db # 查看当前正在使⽤数据库名称
- show collections/tables # 查看当前数据库下的集合(表)
- db.dropDatabase() # 删除当前正在使⽤的数据库
db.demo2.isCapped() # 查看是否设置了上限
不⼿动创建表(当前没有这个表,插⼊⼀条数据,表⾃动创建)
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.xuyichun.isCapped()
capped:true,必须有size
insert()
db.demo1.insert({'name':'xuyichun','age':22})
db.demo1.insert([{name:'小泽',age:20,addr:'南京'},{name:'小超',age:20,addr:'南京'}])
for(i=3;i<10;i++)db.demo1.insert({x:i})
db.mark.save({_id:1,name:'朱泽'})
find()
查询集合内所有数据
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.xuyichun.find({},{age:1})
- db.xuyichun.find({},{age:1,_id:0})
排序
- # 按照年龄升序
- db.xuyichun.find().sort({age:1})
- # 按照年龄降序
- db.xuyichun.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.xuyichun.deleteOne({age:96})
- db.xuyichun.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 是集合的索引
pip install pymongo -i https://pypi.douban.com/simple
插入
- 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)
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。