前情回顾
1. 修改器
$inc $mul $max $min
$push $pushAll $pull $pullAll $pop $addToSet $each $sort $position
2. 删除文档
deleteOne(query)
deleteMany()
remove()
findOneAndDelete()
3. 数据类型
【1】 时间类型 : new Date()
Date()
ISODate()
ValueOf()
【2】 Null : null 表示空
【3】 Object类型 :"外部域.内部域"
4. 索引操作
* 索引约束
* 创建索引
createIndex()
createIndexes()
ensureIndex()
getIndexes()
dropIndex()
dropIndexes()
5. 聚合操作
aggregate([{},{},{}....])
$group
$sum
$avg
$max
$min
$match
$limit
$skip
$sort
**************************************************
一. 聚合操作符(续)
1. $project : 选择显示的域(值的写法同field参数)
e.g. 筛选结果不显示_id
db.class0.aggregate([{$match:{}},{$project:{_id:0,Name:'$name',Age:'$age'}}])
练习: 使用grade
1. 将所有男生按照年龄升序排序,结果不显示_id
aggregate([$match:{sex:'m'},{$sort:{age:1}},{$project:{_id:0}}])
2. 将所有喜欢画画的女生按照年龄排序,取年龄最小的三个,只显示姓名,年龄,爱好
aggregate([{$match:{hobby:'draw',sex:'w'}},{$sort:{age:1}},{$limit:3},{$project:{_id:0,name:1,age:1,hobby:1}}])
二. 固定集合
定义: 指的是mongodb中创建固定大小的集合,称之为固定集合
特点: 1. 能够淘汰早期数据
2. 可以控制集合大小
3. 数据插入,查找速度快
使用 : 日志处理,临时缓存
创建 : db.createCollection(collection,{capped:true,size:10000,max:20})
capped:true 表示创建固定集合
size :10000 固定集合大小 字节
max :20 固定集合可存放文档数量
e.g. 创建固定集合log,最多存放3条文档
db.createCollection('log',{capped:true,size:1000,max:3})
三. 文件存储
1. 文件存储数据库方式
【1】 存储路径:将本地文件所在的路径以字符串存储到数据库中。
优点: 操作简单,节省数据库空间
缺点:当数据库或者文件发生变化需要修改数据库
【2】 存储文件本身:将文件转换为二进制存储到数据库中。
优点:文件绑定数据库,不容易丢失
缺点: 占用数据库空间大,文件存取效率低
2. GridFS文件存储方案
目的:更方便的存取mongodb中大文件(>16M)
说明:
1. mongodb数据库中创建两个集合共同存储文件
2. fs.files集合中为每个文件建立一个信息文档,存储文件的基本信息
3. fs.chunks集合中每个文档建立与fs.files的关联,并将文件分块存储
存储方法:
mongofiles -d dbname put file
e.g. 将Postman... 存储到grid数据库中
mongofiles -d grid put Postman.tar.gz
提取方法:
mongofiles -d dbname get file
e.g. 从数据库中获取Post...文件
mongofiles -d grid get Postman.tar.gz
优缺点 : 对大文件的存储提取方便,但是读写效率仍然比较低,不建议用来存储小文件。
四. mongo shell 对 JavaScript支持
* mongo shell界面中支持基本的JS代码
* 通过js处理mongo的一些数据逻辑
五. Python操作MongoDB
1. 第三方模块 : pymongo
安装 : sudo pip3 install pymongo
2. 操作步骤
【1】 导入模块,连接mongodb数据库
from pymongo import MongoClient
conn = MongoClient('localhost',27017)
【2】 选择要操作的数据库和集合
db = conn.stu # 选择数据库
myset = db.class0 # 选择集合
【3】 通过集合对象调用接口完成数据操作
数据书写转换:
文档 ----》 字典
数组 ----》 列表
布尔 ----》 python布尔
null ----》 None
操作符 ----》 字符串形式原样书写
$lt "$lt"
【4】 关闭数据库连接
conn.close()
3. 数据操作函数 (mongodb/mongo.py)
【1】 插入文档
insert_one() 插入一条文档
insert_many() 插入多条文档
insert() 插入一条或多条文档
save() 插入文档,如果_id重复会覆盖
【2】 查找操作
cursor = find(query,field)
功能:查找所有文档
参数:形式同mongo中 find
返回值:查找结果的游标对象
cursor对象属性
* 通过迭代获取每个查找文档结果
* 通过调用属性方法对结果进行进一步操作
next()
limit()
skip()
count()
sort([('age',1),('name',1)])
注意:
1.调用limit,skip,sort时游标必须没有遍历过
2. sort排序写法域mongoshell不同
{age:1,name:1}->[('age',1),('name',1)]
find_one(query,field)
功能:查找一个文档
参数: 同find
返回值: 文档字典
【3】 修改操作
update_one() 修改一个文档
update_many() 修改多个文档
update()
【4】 删除操作
delete_one() 删除一个文档
delete_many() 删除多个文档
remove()
【5】 复合操作
find_one_and_delete()
【6】 索引操作
create_index(index,**kwargs)
功能: 创建索引
参数: {name:1} --> [('name',1)]
kwargs 索引选项
返回值: 索引名称
list_indexes() 查看索引
drop_index() 删除索引
drop_indexes() 删除所有索引
【7】 聚合操作
cursor = aggregate([{},{}])
功能: 完成聚合操作
参数: 聚合管道,同mongo shell
返回值: 数据结果游标
4. 文件存储
import bson
1. 将文件内容转换为bson二进制格式存储
content = bson.binary.Binary(bytes)
功能: 将python字节串转换为bson格式
参数: 要转换的字节串
返回值: bson数据
2. 将bson数据 插入到mongo数据库文档中