MongoDB day04
聚合操作
符号 | 含义 | 例子 |
---|---|---|
$limit | 显示前几条文档 | 获取数据的前两个文档:db.class1.aggregate({$limit:2}) |
$skip | 跳过几条文档 | 跳过前两条文档显示后面内容 :db.class1.aggregate({$skip:2}) |
$sort | 排序 | 按年龄升序排序:db.class1.aggregate({$sort:{age:1}}) |
聚合管道 :
- 作用: 将前一个聚合操作得到的结果,给后一个 聚合操作继续使用
- 格式:db.collection.aggregate([聚合1,聚合2….])
- e.g.
project —> $sort
db.class1.aggregate([{$match:{sex:'m'}},{$project:{_id:0}},{$sort:{age:1}}])
e.g. match
db.class1.aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])
练习:增加分数域 score:{chinese:88,math:76,english:76}
学生按照性别分组,统计每组人数
aggregate({$group:{_id:'$sex',num:{$sum:1}}})
统计每名男生的语文分数
aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,'score.chinese':1}}])
将所有女生按照英语成绩降序排序
aggregate([{$match:{sex:'w'}},{$sort:{'score.englisth':-1}}])
固定集合
- 定义:mongodb中可以创建大小固定的集合,称之为固定集合
- 特点 :
2. 插入速度快,顺序查找速度快
1. 能够淘汰早期数据
1. 可以控制集合大小 - 使用 :
2. 临时缓存
1. 日志处理 格式: db.createCollection(collection,{capped:true,size:10000,max:1000})
capped:true 表示创建固定集合
size : 表示集合的大小 bytes 4.0最小 4096
max : 表示最多存放多少文档e.g.
db.createCollection('log',{capped:true,size:10,max:3})
文件存储
文件存储到数据库方式
存储路径
将文件在本地的路径以字符串形式存储到数据库优点 : 节省数据库空间
缺点 : 当数据库或者文件位置发生变化时文件丢 失。存储文件本身
以二进制方式将文件存储到数据库优点:数据库和文件绑定存在
缺点 : 占用空间大,结构化麻烦
mongodb存储二进制文件
前提条件:
- GridFS方法存储大文件 >16M为大文件
- 将文件转化为二进制,进行插入 Binary data
GridFS方案解释
- 在mongodb中一个数据库创建两个集合共同完成对文件的存储
- fs.files 用来存储文件的相关信息,为每一个文件创建一个文档,存储文件名、文件类型等信息
- fs.chunks 用来分块存储文件的实际内容
如何存储
格式:
mongofiles -d dbname put file 数据库 要存储的文件 注意:如果数据库不存在自动创建
fs.files { "_id" : ObjectId("5b569b8969d72e103282f608"), "chunkSize" : 261120, "uploadDate" : ISODate("2018-07-24T03:22:54.259Z"), "length" : 247759369, "md5" : "a94853f4f64b3e87bf98aea770855615", "filename" : "abc.mp4" } fs.chunks { "_id" : ObjectId("5b569b8969d72e103282f61d"), "files_id" : ObjectId("5b569b8969d72e103282f608"), "n" : 20, "data" : BinData(0,"7Pa7M7M9nZt2bezsz272vbdm/7fhu672fwAAbZKbmR2S7Ndv/.....")} * 对于同一个文件 fs.files中的_id值等于 fs.chunks中的files_id值
- 文件提取方法
- 格式:mongofiles -d dbname get file
- Grid的优缺点
优点 : 存储方便,提供较好的命令支持
缺点 : 读写效率低
游标
通过一定的操作获取返回结果的对象
var cursor = db.class1.find()
cursor.hasNext() 判断是否有next
cursor.next() 获取下一条数据
python操作mongodb
安装
sudo pip3 install pymongo
操作步骤
- 创建mongodb数据库连接对象
conn = pymongo.MongoClient('localhost',27017)
- 得到数据库对象
db = conn.stu
- 获取集合对象
myset = db.class1
- 增删改查,索引 ,聚合
调用各种myset的属性函数
- 关闭数据库连接
conn.close()
- 创建mongodb数据库连接对象
插入操作
insert() insert_many() insert_one() save()
查找操作
- 方法: cursor = find()#返回一个结果游标
注意: 在pymongo中使用操作符的方法与mongo shell中相同,只需要转变为字符串格式加上引号即可
cursor 的属性函数
next() limit() skip() sort([('name',1),('age',-1)]) count() #使用了next或者for取游标后就不能使用limit sort操作了
方法find_one()#返回一个字典
更新操作
update(query,updata,upsert=False,multi=False) update_many() update_one()
删除操作
- 格式:
remove(query,multi = True)
multi默认为True表示删除所有筛选内容
如果设置为False则表示删除一条
- 格式:
复合功能函数
find_one_and_delete()
索引操作
ensure_index() 创建索引 list_indexes() 查看索引 drop_index() 删除索引 drop_indexes() 删除所有索引
聚合操作
- 格式:aggregate([])
参数写法和mongo shell中聚合相同
返回值 : 返回一个迭代游标 同find()
- 格式:aggregate([])
GridFS 程序提取
import gridfs gridfs.GridFS(db) 插入二进制格式数据 import bson.binary