Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)

本文详细介绍了如何使用Python进行MongoDB数据库操作,涵盖了聚合框架的运用、二进制数据存储、GridFS文件系统以及pymongo模块的使用技巧,帮助开发者实现全栈数据管理。
摘要由CSDN通过智能技术生成
断网了2天  今天补上
 
 
聚合操作:
对文档的信息进行整理统计的操作
返回:统计后的文档集合
db.collection.aggregate()
功能:聚合函数,完成聚合操作
参数:聚合条件,配合聚合操作符使用
返回:聚合后的结果
 
常用聚合操作符:
1. $group  分组聚合   要配合具体的统计操作符获取结果
 
$sum  求和
db.class1.aggregate({$group:{_id:'$gender',num:{$sum:1}}})
     分组   按照gender值统计 统计结果,求和每有一个加1
统计所有男生和女生的年龄之和
db.class1.aggregate({$group:{_id:'$gender',num:{$sum:'$age'}}})
 
$avg  平均值
求男生 女生年龄的平均数
 db.class1.aggregate({$group:{_id:'$gender',num:{$avg:'$age'}}})
 
$max 求最大值
求男生女生的年龄最大值
db.class1.aggregate({$group:{_id:'$gender',num:{$max:'$age'}}})
 
$min  求最小值
求男生女生的年龄最小值
db.class1.aggregate({$group:{_id:'$gender',num:{$min:'$age'}}})
 
2. $project
用于修改文档的显示效果
 
$project值的用法同find()的field参数相同
db.class1.aggregate({$project:{_id:0,name:1,age:1}})
 
自定义显示的域名
db.class1.aggregate({$project:{_id:0,Name:'$name',Age:'$age'}})
 
 
3. $match
过滤想要的数据
 
过滤年龄大于30的数据,$match值的写法同query
 db.class1.aggregate({$match:{age:{$gt:30}}})
 
4. $limit
显示前几个文档
db.class1.aggregate({$limit:3})
 
5. $skip
跳过前几个文档显示
 db.class1.aggregate({$skip:2})
 
6. $sort   排序
 
按照年龄排序
db.class1.aggregate({$sort:{age:1}})
 
聚合管道
将前一个聚合操作产生的结果,交给后一个聚合操作继续使用
db.collection.aggregate([{聚合1},{聚合2},{}...])
 
$match --> $sort -->$project
 db.class1.aggregate([{$match:{gender:'m'}},{$sort:{age:1}},{$project:{_id:0}}])
 
聚合示例
使用grade数据库
给更多同学添加 域score
score:{english:87,chinese:76,math:91}
 
1. 按照性别统计每组人数
aggregate({$group:{_id:'$sex',num:{$sum:1}}})
 
2. 统计该班中有哪个同学姓名为重名同学
aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])
 
3. 统计所有男生的语文成绩,只打印姓名,性别,语文成绩即可
aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,sex:1,'score.chinese':1}}])
 
4. 将所有女生按照英语成绩降序排序
aggregate([{$match:{sex:'w'}},{$sort:{'score.english':-1}}])
 
文件存储:
 
1.存储路径
将文件放在本地路径(网络路径)下,然后数据库中存储该文件的查找路径
  
优点 : 节省数据库空间
缺点 : 当数据或者文件位置发生变化时文件即丢失
 
2. 将文件转换为二进制,存储文件本身
 
数据库支持二进制数据格式
将文件转换为二进制格式,然后存入数据库中
 
优点 : 数据库和文件绑定,数据库在文件即在
缺点 : 占用数据库空间大,存取效率低
 
mongodb存储文件本身
* 如果是小文件建议转换二进制直接插入
* 如果是大文件建议使用 GridFS方案存储(大于16M)
 
GridFS方案解释
 
1. 在mongodb一个数据库中使用两个集合配合存储文件
2. fs.files 用来存储文件的相关信息,为每一个文件创建一个文档,
   存储文件名,文件大小,存入时间。。。
3. fs.chunks 用来分块存储文件的实际内容(Binary data 类型数据)
 
存储方法:
mongofiles  -d dbname(数据库)    put  file(要存储的文件)
                                         
 
* 数据库不存在会自动创建数据库
  数据库中会自动创建fs.files  fs.chunks两个集合
 
fs.files文档结构:
{
"_id" : ObjectId("5b7cdcd769d72e12b4f166d0"),
"chunkSize" : 261120,
"uploadDate" : ISODate("2018-08-22T03:47:35.381Z"),
"length" : 305033,
"md5" : "3698b5e762b5b396766aaf9feef7e10d", 
"filename" : "file.jpg"
}
 
fs.chunks文档结构
{
"_id" : ObjectId("5b7cdcd769d72e12b4f166d2"),
"files_id" : ObjectId("5b7cdcd769d72e12b4f166d0"), 
"n" : 1, 
"data" : BinData(0,"tQWR0AR......AG") 
}
 
* 同一个文件fs.files中的_id值等于fs.chunks中的    files_id域的值
 
提取方法:
 
mongofiles  -d  dbname    get  file
 
G
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值