python学习之爬虫--MongDB数据库: MongDB的介绍和安装MongoDB的权限管理mongodb的基本使用
Posted 浅弋、璃鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习之爬虫--MongDB数据库: MongDB的介绍和安装MongoDB的权限管理mongodb的基本使用相关的知识,希望对你有一定的参考价值。
一、MongDB的介绍和安装:
1.什么是NoSQL:
- “NoSQL”⼀词最早于1998年被⽤于⼀个轻量级的关系数据库的名字
- 随着web2.0的快速发展, NoSQL概念在2009年被提了出来;
- NoSQL在2010年⻛⽣⽔起, 现在国内外众多⼤⼩⽹站, 如facebook、 google、 淘宝、 京东、 百度等, 都在使⽤nosql开发⾼性能的产品;
- 对于⼀名程序员来讲, 使⽤nosql已经成为⼀条必备技能;
- NoSQL最常⻅的解释是“non-relational”, “Not Only SQL”也被很多⼈接受, 指的是⾮关系型的数据库;
2.关系型和非关系型的介绍:
对于关系型数据库,存储数据的时候需要提前建表建库,随着数据的复杂度越来越高,所建的表的数量也越来越多;但是非关系型却不需要
- 关系型数据库很起那个大,但是并不能很好的应付所有的应用场景. mysql的扩展性差, 大数据下IO压力大, 表结构更改困难;
- MongDB易扩展, 大数据量高性能, 灵活的数据模型,高可用;
3. MongDB的安装:
3.1 命令安装:
Debian(或Ubuntu)系统:
文档: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
sudo apt-get install -m mongdb
3.2 源码安装:
- 解压:
tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.0.9.tgz
- 移动到/usr/local/目录下
sudo mv -r mongodb-linux-x86_64-ubuntu1804-4.0.9/ /usr
/local/mongdb
- 将可执行文件添加到PATH路径中
export PATH=/usr/local/mogodb/bin:$PATH
4.mongodb的启动
4.1 服务端mongodb的启动
启动方式1:以本机测试的方式启动(缺少备份权限管理等功能)
- 启动: sudo service mongod start (sudo service mongodb start ,mongod 改为 mongodb, 下同)
- 停止: sudo service mongod stop
- 重启: sudo service mongod restart
- 配置文件的位置:/etc/mongod.conf
- 日志的位置:/var/log/mongodb/mongod.log
- 默认端⼝:27017
启动方式2:正常方式启动
- 启动: sudo mongod [–dbpath=dbpath --logpath=logpath --logappend --fork --auth]
- 只以 sudo mongod 命令启动时,默认将数据存放在了 /data/db 目录下,需要手动创建
- –dbpath: 指定数据库的存放路径,绝对路径
- –logpath: 指定日志的存放路径,绝对路径
- –logappend: 设置日志的写入形式为追加模式
- –fork: 后台运行mongodb服务,此种模式需要指定logpath,有时只指定logpath不指定fork也可以后台启动
- –auth: 以权限认证的方式启动
注意:
- ps aux | grep mongod 可以查看mongod服务的进程号,通过sudo kill pid的方式关闭后台进程,或ctrl+c关闭前台进程
- 关闭后需要删除db文件夹下的xxx.lock锁文件才能再次启动
- 如果再次启动失败,可以添加–repair恢复启动命令后重新启动
4.2 客户端mongo
- 启动本地客户端:mongo
- 查看帮助:mongo –help
- 退出:exit或者ctrl+c
4.3 mongodb的官方文档
网址:https://docs.mongodb.com/manual/introduction/
二、MongoDB的权限管理:
1. 为什么要进行权限管理的设置:
刚安装完毕的mongodb默认不适用权限认证的方式启动, 与mysql不同,mongodb在安装的时候并没有设置权限,然而公网运行系统需要设置权限一保证数据安全.
2.mongodb的权限管理方案:
MongoDB是没有默认管理员账号,所以要先添加管理员账号,并且mongodb服务器需要再运行的时候开启验证模式:
- 用户只能在用户所在的数据登录(创建用户的数据库), 包括管理员账号;
- 管理员可以管理所有的数据库,但是不能直接管理其他数据库,要先认证才行;
3.mongodb超级管理员账号的创建:
3.1 以权限认证的方式启动mongodb数据库:
sudo mongodb -auth
启动后在启动信息展示如下, 说明mongodb以权限认证的方式启动成功:
3.2 创建超级用户:
输入命令,进入mongodb的client:
使用admin数据库(超级管理员行号必须创建在该数据库上)
use admin
创建超级用户
db.createUser("user":"python", "pwd":"python", "roles":["root"])
一下样式,说明创建python超级用户成功:
3.3 退出客户端再次登录验证:
此时在使用数据库各种命令的时候回报权限错误,需要认证才能执行相应的操作:
python用户是创建在admin数据上的, 所以必须来到admin数据库上进行认证,认证成功会返回1,失败返回0
4. 创建普通用户:
4.1 选择需要创建用户的数据库:
use test1
4.2 在使用的数据库上创建普通用户:
db.createUser("user":"user1", "pwd":"pwd1", roles:["read"])
创建普通用户user1,该用户在test1上的权限是只读
db.createUser("user":"user2", "pwd":"pwd2", roles:["readWrite"])
创建普通用户user2,该用户在test1上的权限是读写
5. 查看创建的用户:
> show user
6. 删除用户:
db.dropUser("python")
三、mongodb的基本使用:
1. mongodb数据库的命令:
- 查看当前数据库:db(没有切换数据库的情况下默认使用test数据库)
- 查看所有的数据库: show dbs / show databases
- 切换数据库: use db_name
- 删除当前的数据库: db.dropDatebase()
2. mongodb集合的命令:
- 不手动创建集合:向不存在的集合中第一次加入数据时, 集合会被创建;
- 手动创建集合:
- db.createCollection(name, options)
- db.createCollection(“stu”)
- db.createCollection(“sub”, capped: true, size:10)
- 参数:capped:默认false表示不设置上上限,为true表示设置上限;
- 参数:size:当capped值为true时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据覆盖, 单位为字节;
- 查看集合: show collections
- 删除集合: db.集合名.drop()
- 检查集合是否有上限: db.集合名.isCapped()
3.mongodb中常见的数据类型:
3.1 常见类型:
- Object ID: 文档ID;
- String: 字符串,最常用,必须是有效的utf-8;
- Boolenan: 布尔类型, true或false;
- Integer: 整数类型, 32位或64位,取决于服务器;
- Double: 浮点值;
- Arrays: 数组或列表,多个值存储到一个键;
- Object: 嵌入式的文章, 即一个值为一个文档;
- Null: Null值;
- Timestamp: 时间戳
- Date: 日期时间,UNIX格式;
3.2 注意点:
- 每个文档都有一个_id属性,保证每个文档的唯一性,mongodb默认使用_id作为主键;
- 可以自己去设置_id插入文档,如果没有提供,nameMongoDB为每个文档提供了一个独特的_id, 为ObectID;
- objectID是一个12字节的十六进制数,每个字节两位,一共24字节:前4字节为当前时间戳, 3字节为机器码ID, 2字节为MongoBD的服务进程id, 最后3字节是简单的增量值;
4 mongo的增删改查:
4.1 插入:
- 命令: db.集合名.insert(document)
db.stu.insert(name:'gj', gender:1)
db.stu.insert(_id:"20190430", name:'gj', gender:2)
插入文档时,如果不指定_id参数, mongodb会为文档分配一个唯一的Objectid
4.2 保存:
命令: db.集合名.save(document)
如果文档的_id已存在就修改, 如果文档_id不存在就添加
db.stu.save(_id:"20190430", name:"lisi", gender:1)
db.stu.find()
4.3 简单查询:
命令: db.集合名.find()
db.stu.find()
4.4 更新:
命令: db.集合名.update(<query>, <update>,multi:<boolean>)
- 参数:query: 查询条件;
- 参数: update: 更新操作符;
- 参数: multi: (可选), 默认false, 表示只更新查到的第一条记录,值为true表示把安祖条件的文档全部更新;
db.stu.update(name: "lisi", name:"李斯") # 全文档进行覆盖更新
db.stu.update(name:"zhangsan", $set:name:"张三") # 指定键值更新
db.stu.update(, $set:gender:0, multi:true) # 更新全部
ps:
“multi update only works with $ operators”
4.5 删除:
命令: db.集合名.remove(<query>, justOne:<boolean>)
- 参数:query:(可选):删除文档的条件
- 参数:justOne:(可选):如果为true, 删除一条, 默认flase,删除多条;
以上是关于python学习之爬虫--MongDB数据库: MongDB的介绍和安装MongoDB的权限管理mongodb的基本使用的主要内容,如果未能解决你的问题,请参考以下文章