mongodb的使用

一, mongodb的介绍和安装:
mongodb优势:

易扩展: NoSQL数据库种类繁多, 但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展
⼤数据量, ⾼性能: NoSQL数据库都具有⾮常⾼的读写性能, 尤其在⼤数据量下, 同样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单
灵活的数据模型: NoSQL⽆需事先为要存储的数据建⽴字段, 随时可以存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 如果是⾮常⼤数据量的表, 增加字段简直就是⼀个噩梦
mongodb的使用
mongodb安装:

1.命令安装:sudo apt-get install -y mongodb
2. 源码安装:
mongodb的使用
mongodb启动:

mongodb的使用
mongodb的使用
mongodb的使用
客户端mongo:

启动本地客户端:mongo
查看帮助:mongo –help
退出:exit或者ctrl+c
mongodb官方文档:

https://docs.mongodb.com/manual/introduction/

二, mongodb的权限管理

权限管理了解:

    MongoDB是没有默认管理员账号,所以要先添加管理员账号,并且mongodb服务器需要在运行的时候开启验证模式

用户只能在用户所在数据库登录(创建用户的数据库),包括管理员账号。
管理员可以管理所有数据库,但是不能直接管理其他数据库,要先认证后才可以。
mongodb超级管理员账号创建:
mongodb的使用
mongodb的使用

创建普通用户:

mongodb的使用
3. 在其他数据库上创建普通用户
use admin
db.createUser({“user”:“python1”, “pwd”:“python1”, roles:[{“role”:“read”,“db”:“dbname1”},{“role”:“readWrite”,“db”:“dbname2”}
]})
mongodb的使用
查看创建的用户: show user
删除用户:db.dropUser(‘账号’)
三, mongodb的基本使用:

mongodb数据库命令:

查看当前的数据库:db(没有切换数据库的情况下默认使用test数据库)
查看所有的数据库:show dbs /show databases
切换数据库:use db_name
删除当前的数据库:db.dropDatabase()
mongodb集合命令:

查看集合:show collections
删除集合:db.集合名称.drop()
检查集合是否有上限: db.集合名.isCapped()
注:参数capped: 默认值为false表示不设置上限,值为true表示设置上限
常见类型:
Object ID: ⽂档ID
String: 字符串, 最常⽤, 必须是有效的UTF-8
Boolean: 存储⼀个布尔值, true或false
Integer: 整数可以是32位或64位, 这取决于服务器
Double: 存储浮点值
Arrays: 数组或列表, 多个值存储到⼀个键
Object: 用于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
Null: 存储Null值
Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
Date: 存储当前⽇期或时间的UNIX时间格式
注意点:
mongodb的使用

mongodb的增删改查:

    插入:db.集合名称.insert(document)
  注:插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
    保存:db.集合名称.save(document)
   注:如果文档的_id已经存在则修改, 如果文档的_id不存在则添加
     更新:db.集合名称.update(<query> ,<update>,{multi: <boolean>})

参数query:查询条件
参数update:更新操作符
参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
mongodb的使用
删除:db.集合名称.remove(,{justOne: })
参数query:可选,删除的⽂档的条件
参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
mongodb高级查询:

    数据查询:

mongodb的使用
比较运算符:

等于: 默认是等于判断, 没有运算符
⼩于:ltlessthanlt (less than) ⼩于等于:lte (less than equal)
⼤于:gtgreaterthangt (greater than) ⼤于等于:gte
不等于:$ne

逻辑运算符:

    and:在json中写多个条件即可  

mongodb的使用
or:使⽤$or, 值为数组, 数组中每个元素为json
mongodb的使用
范围运算符:

    使⽤$in, $nin 判断数据是否在某个数组内

mongodb的使用
正则表达式:

    使⽤//或$regex编写正则表达式,或传入re.compile规则 

mongodb的使用
自定义查询:

    由于mongo的shell是一个js的执行环境 使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据

mongodb的使用
skip和limit:

mongodb的使用
投影:
在查询到的返回结果中, 只选择必要的字段
命令:db.集合名称.find({},{字段名称:1,…})
参数为字段与值, 值为1表示显示, 值为0不显 特别注意: 对于_id列默认是显示的, 如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
排序:

⽅法sort(), ⽤于对 集进⾏排序

命令:db.集合名称.find().sort({字段:1,…})

参数1为升序排列 参数-1为降序排列
mongodb的使用
统计个数:

⽅法count()⽤于统计结果集中⽂档条数

命令:db.集合名称.find({条件}).count() 命令:db.集合名称.count({条件})
mongodb的使用
去重:

⽅法distinct()对数据进⾏去重

命令:db.集合名称.distinct(‘去重字段’,{条件})
mongodb的使用
四,mongodb的聚合操作

mongodb聚合:聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。

 语法:db.集合名称.aggregate({管道:{表达式}}) 
常用管道命令:    

$group: 将集合中的⽂档分组, 可⽤于统计结果
$match: 过滤数据, 只输出符合条件的⽂档
$project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
$sort: 将输⼊⽂档排序后输出
$limit: 限制聚合管道返回的⽂档数
$skip: 跳过指定数量的⽂档, 并返回余下的⽂档
常用表达式:

表达式:处理输⼊⽂档并输出 语法:表达式:'$列名' 常⽤表达式:

$sum: 计算总和, $sum:1 表示以⼀倍计数
$avg: 计算平均值
$min: 获取最⼩值
$max: 获取最⼤值
$push: 在结果⽂档中插⼊值到⼀个数组中
五, mongodb的索引

索引的利弊:能够加快查询速度,会降低写入速度;索引本质是有序的,插入数据时,需要额外计算该插入值的顺序是多少;避免读写分离;索引不能随便建立,根据禅熏的需要来建立索引。
创建简单索引的方法:      

语法:

db.集合.ensureIndex({属性:1}),1表示升序, -1表示降序
db.集合.createIndex({属性:1})
索引的查看:

    默认情况下_id是集合的索引
    查看方式:db.collection_name.getIndexes()

创建唯一索引:

    添加唯一索引的语法:
db.collection_name.ensureIndex({"name":1},{"unique":true})
删除索引:

    语法:db.t1.dropIndex({'索引名称':1})
建立符合索引:

    语法:db.collection_name.ensureIndex({字段1:1,字段2:1})

六, mongodb的备份恢复与导入导出

备份:

    备份的语法:mongodump -h dbhost -d dbname -o dbdirectory

-h: 服务器地址, 也可以指定端⼝号
-d: 需要备份的数据库名称
-o: 备份的数据存放位置, 此⽬录中存放着备份出来的数据
恢复:

    恢复语法:mongorestore -h dbhost -d dbname --dir dbdirectory       

-h: 服务器地址
-d: 需要恢复的数据库实例
–dir: 备份数据所在位置

导出:

    导出语法: mongoexport -h dbhost -d dbname -c colname -o filename --type json/csv -f field

-h: 服务器地址
-d: 数据库名
-c: 集合名
-o: 导出文件名
–type: 文件类型,默认json格式,可选数据类型json,csv
-f: 需要导出的字段,导出为json格式的数据时可以不指定导出哪些字段,默认全部,导出成csv文件是必须指定
导入:

    导入语法: mongoimport -d dbname -c colname --file filename [--headerline --type json/csv -f field]

-h: 服务器地址
-d: 数据库名
-c: 集合名
-o: 导入文件名
–type: 文件类型,默认json格式,可选数据类型json,csv
-f: 需要导入的字段,导出为json格式的数据时可以不指定导出哪些字段,默认全部,导出成csv文件是必须指定
七,mongodb和python交互

mongodb和python交互模块:

    pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo      

mongodb的使用