mongodb的使用
一, mongodb的介绍和安装:
mongodb优势:
易扩展: NoSQL数据库种类繁多, 但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展
⼤数据量, ⾼性能: NoSQL数据库都具有⾮常⾼的读写性能, 尤其在⼤数据量下, 同样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单
灵活的数据模型: NoSQL⽆需事先为要存储的数据建⽴字段, 随时可以存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 如果是⾮常⼤数据量的表, 增加字段简直就是⼀个噩梦
mongodb安装:
1.命令安装:sudo apt-get install -y mongodb
2. 源码安装:
mongodb启动:
客户端mongo:
启动本地客户端:mongo
查看帮助:mongo –help
退出:exit或者ctrl+c
mongodb官方文档:
https://docs.mongodb.com/manual/introduction/
二, mongodb的权限管理
权限管理了解:
MongoDB是没有默认管理员账号,所以要先添加管理员账号,并且mongodb服务器需要在运行的时候开启验证模式
用户只能在用户所在数据库登录(创建用户的数据库),包括管理员账号。
管理员可以管理所有数据库,但是不能直接管理其他数据库,要先认证后才可以。
mongodb超级管理员账号创建:
创建普通用户:
3. 在其他数据库上创建普通用户
use admin
db.createUser({“user”:“python1”, “pwd”:“python1”, roles:[{“role”:“read”,“db”:“dbname1”},{“role”:“readWrite”,“db”:“dbname2”}
]})
查看创建的用户: 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的增删改查:
插入:db.集合名称.insert(document)
注:插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
保存:db.集合名称.save(document)
注:如果文档的_id已经存在则修改, 如果文档的_id不存在则添加
更新:db.集合名称.update(<query> ,<update>,{multi: <boolean>})
参数query:查询条件
参数update:更新操作符
参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
删除:db.集合名称.remove(,{justOne: })
参数query:可选,删除的⽂档的条件
参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
mongodb高级查询:
数据查询:
比较运算符:
等于: 默认是等于判断, 没有运算符
⼩于:lte (less than equal)
⼤于:gte
不等于:$ne
逻辑运算符:
and:在json中写多个条件即可
or:使⽤$or, 值为数组, 数组中每个元素为json
范围运算符:
使⽤$in, $nin 判断数据是否在某个数组内
正则表达式:
使⽤//或$regex编写正则表达式,或传入re.compile规则
自定义查询:
由于mongo的shell是一个js的执行环境 使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
skip和limit:
投影:
在查询到的返回结果中, 只选择必要的字段
命令:db.集合名称.find({},{字段名称:1,…})
参数为字段与值, 值为1表示显示, 值为0不显 特别注意: 对于_id列默认是显示的, 如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
排序:
⽅法sort(), ⽤于对 集进⾏排序
命令:db.集合名称.find().sort({字段:1,…})
参数1为升序排列 参数-1为降序排列
统计个数:
⽅法count()⽤于统计结果集中⽂档条数
命令:db.集合名称.find({条件}).count() 命令:db.集合名称.count({条件})
去重:
⽅法distinct()对数据进⾏去重
命令:db.集合名称.distinct(‘去重字段’,{条件})
四,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