(四)MongoDB

聚合操作

$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 
 

猜你喜欢

转载自blog.csdn.net/zh__quan/article/details/81213487