聚合操作
$limit 显示前几条文档
e.g. 获取数据的前两个文档
db.class.aggregate({$limit:2})
$skip 跳过几条文档
e.g. 跳过前两条显示后面内容
db.class.aggregate({$skip:2})
$sort 排序
e.g. 按年龄升序排序
db.class.aggregate({$sort:{age:1}})
聚合管道:将前一个聚合操作得到的结果,给后一个聚合操作继续使用
db.collection.aggregate([聚合1,聚合2....])
$match ---> $project --> $sort
db.class.aggregate([{$match:{sex:'m'}},{$project:{_id:0}},{$sort:{age:1}}])
$grop ---> $match
db.class.aggregate([{$group:{_id:'$age',num:{$sum:1}}},{$match:{num:{$gt:1}}}])
练习:
增加分数域 score:{chinese:88,math:76:,english:76}1.学生按照性别分组,统计每组人数
2.统计每名男生的语文分数
3.将所有女生按照英语成绩降序排序
db.class.update({'name':'zhao'},{$set:{score:{chinese:88,math:76,english:76}}})
db.class.update({'name':'li'},{$set:{score:{chinese:80,math:43,english:71}}})
db.class.update({'name':'zhou'},{$set:{score:{chinese:78,math:66,english:13}}})
db.class.update({'name':'wu'},{$set:{score:{chinese:68,math:77,english:7}}})
db.class.update({'name':'zhen'},{$set:{score:{chinese:58,math:96,english:79}}})
db.class.update({'name':'wang'},{$set:{score:{chinese:69,math:70,english:95}}})
db.class.update({'name':'xie'},{$set:{score:{chinese:95,math:66,english:88}}})
db.class.aggregate({$group:{_id:'$sex',num:{$sum:1}}})
db.class.aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,'score.chinese':1}}])
db.class.aggregate([{$match:{sex:'w'}},{$sort:{'socre.english':-1}}])
固定集合
mongodb中可以创建大小固定的集合,称之为固定集合
特点: 插入速度块,顺序查找速度快
能够淘汰早期数据
可以控制集合大小
使用:临时缓存
日志处理
db.createCollection(collection,{capped:true,size:10000,max:1000})
capped:true 表示创建固定集合
size: 表示集合的大小 bytes 最小4096
max: 表示最多存放多少文档
e.g.
db.createCollection('log',{capped:true,size:1000,max:3})
db.log.insert({login:"No.1",date:Date()})
db.log.insert({login:"No.2",date:Date()})
db.log.insert({login:"No.3",date:Date()})
文件存储
文件存储到数据库方式
1.存储路径
将文件在本地的路径以字符串形式存储到数据库
优点:节省数据库空间,便于提取
缺点:当数据库或者文件位置发生变化时文件丢失
2.存储文件本身
以二进制方式将文件存储到数据库
优点:数据库和文件绑定存在
缺点:占用空间大,结构化麻烦
mongodb存储二进制文件
* GridFS方法存储大文件 >16M为大文件
* 将文件转化为二进制,进行插入 Binary data
GridFS方案解释
1.在mongodb中一个数据库创建两个集合共同完成对文件的存储
2.fs.files 用来存储文件的相关信息,为每一个文件创建一个文档,存储文件名,文件类型等信息
3.fs.chunks 用来分块存储文件的实际内容
如何存储
mongofiles -d dbname put file
数据库 要存储的文件
* 如果数据库不存在则自动创建
* 对于同一个文件 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
pymongo模块 第三方模块
安装
sudo pip3 install pymongo
操作步骤
1.创建mongodb数据库连接对象
conn = pymongo.MongoClient('localhost',27017)
2.得到数据库对象
db = conn.stu
3.获取集合对象
myset = db.class1
4.增删改查,索引,聚合
调用各种myset的属性函数
5.关闭数据库连接
conn.close()
插入操作
insert()
insert_many() insert_one()
save()
查找操作
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,mutli=True)
multi默认为True表示删除所有筛选内容
如果设置为False则表示删除一条
复合功能函数
find_one_and_delete()
索引操作
ensure_index() 创建索引 index = myset.ensure_index([('name', 1), ('age', -1)])
list_indexes() 查看索引
drop_index() 删除索引
drop_indexes() 删除所有索引
聚合操作
aggregate([])
参数写法和mongo shell中聚合相同
返回值:返回一个迭代游标 同find()
GridFS 程序提取
import gridfs
gridfs.GridFS(db)
插入二进制格式数据
import bson.binary