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

爬虫学习之-python插入mysql报错

python学习之爬虫一

python学习之爬虫网络数据采集

python学习之Scrapy爬虫框架

python学习之爬虫:BeautifulSoup

python学习之爬虫一