快捷搜索:  汽车  科技

python怎么使用mongodb(Python全栈MongoDB数据库)

python怎么使用mongodb(Python全栈MongoDB数据库)常用聚合操作符:返回:聚合后的结果db.collection.aggregate()功能:聚合函数,完成聚合操作参数:聚合条件,配合聚合操作符使用

摘要: 断网了2天 今天补上 聚合操作: 对文档的信息进行整理统计的操作 返回:统计后的文档集合 db.collection.aggregate() 功能:聚合函数,完成聚合操作 参数:聚合条件,配合聚合操作符使用 返回:聚合后的结果 常用聚合操作符:

聚合操作:

对文档的信息进行整理统计的操作

返回:统计后的文档集合

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

GridFS方案:

优点 : 存储方便,提供较好的命令支持和编程接口

缺点 : 存取效率低下 还没有复制的快

mongo shell中获取游标

* mongo shell下支持JS代码,可以通过JS获取游标,进而获取数据操作结果。

var cursor = db.class1.find()

cursor.next() 获取下一条结果

cursor.hasNext() 查看是否有下一个对象

通过Python操作 MongoDB:

pymongo 模块 第三方模块

安装:

sudo pip3 install pymongo

操作步骤:

1. 连接数据库,生成数据库连接对象

conn = pymongo.MongoClient('localhost' 27017)

2. 选择要操作的数据库,生成数据库对象 (__setitem__)

db = conn.stu

db = conn['stu']

3. 获取集合对象

myset = db.class0

myset = db['class0']

4. 通过集合对象调用mongodb数据库操作函数

增删改查,聚合,索引。。。。。

5. 关闭数据库连接

conn.close()

插入文档:

insert() 插入数据 功能同 mongoshell

insert_many() 插入多条

insert_one() 插入一条

save() 插入数据,通过_id可以修改

查找操作:

find()

功能 : 对数据库进行查找

参数 : 同mongoshell find()

返回值 : 返回游标对象

cursor = myset.find({} {'_id':0})

cursor的属性函数

next()

limit()

skip()

count()

sort()

Python中sort和MongoDB的区别

并且Python中的数据是字典和MongoDB的数据不同

所以键和操作符号都必须要加引号

pymongo : sort([('age' -1) ('name' 1)])

mongoshell : sort({age:-1 name:1})

* 如果通过for或者next操作了游标对象,再调用limit,skip,sort会报错

find_one()

用法同mongoshell中 findOne()

返回一个字典

修改操作:

update(query update upsert = False,multi = False)

update_many()

update_one()

删除操作:

remove(query multi = True)

功能: 删除文档

参数: query 筛选条件

multi 默认True表示删除所有符合条件的

False只删除一条

索引操作:

ensure_index() 创建索引

list_indexes() 查看索引

drop_index() 删除一个索引

drop_indexes() 删除所有索引

聚合操作:

aggregate([])

参数和mongoshell一样

返回值和find()函数一样也是得到一个游标对象

pymongo进行文件存取操作:

GridFS 文件提取:

import gridfs

1. 连接数据库,获取相应的数据库对象

2. 通过 gridfs.GridFS(db) 获取集合对象(代表存储文件的两个集合)

3. 通过find()查找文件返回游标

4. 通过循环遍历游标获取指定文件对象,read()读取文件内容写入本地

以二进制的方式存取文件

import bson.binary

增删改查操作:

python怎么使用mongodb(Python全栈MongoDB数据库)(1)

python怎么使用mongodb(Python全栈MongoDB数据库)(2)

索引操作:

python怎么使用mongodb(Python全栈MongoDB数据库)(3)

文件的存取:

python怎么使用mongodb(Python全栈MongoDB数据库)(4)

手动存入文件MongoDB默认创建的文件数据导出:

python怎么使用mongodb(Python全栈MongoDB数据库)(5)

更多资讯,尽在阿里云科技快讯~

来科技快讯看新闻鸭~

快点关注我认识我爱上我啊~~~

python怎么使用mongodb(Python全栈MongoDB数据库)(6)

猜您喜欢: