Python-Pymongo-MongoDB
本文最后更新于:2021年6月8日 晚上
信息
Pymongo 是 Python 阻塞操作 MongoDB 的模块
安装
1 |
|
使用
创建连接
1 |
|
MongoClient(‘mongodb://用户名:用户密码@服务IP:服务端口/‘)
访问数据库 Database
你可以使用属性访问的方式,赋值一个数据库(例如名字为primer)给本地变量db
1 |
|
你也可以使用字典形式访问一个数据库
1 |
|
如果数据库不存在,那么会自动创建
访问集合 Collection
访问方式与访问database类似
1 |
|
访问文档 Document
插入
如果你所插入的集合在
MongoDB
中不存在,MongoDB
将为你自动创建一个集合
Collection.insert_one
插入一条数据
1 |
|
操作会返回了一个InsertOneResult
对象,它包括了insert_id
属性表示被插入的文档的_id
如果你传递给
insert_one()
方法的参数不包含_id
字段,MongoClient
将自动添加这个字段并且生成一个ObjectId
设置为这个字段的值。
Collection.insert_many
插入多条数据
1 |
|
查询
查询方法
Collection.find_one
查询集合,得到一个结果,通常用于看看搜索结果的样式
Collection.find
用于查询多个结果,查询可以返回在集合中的所有数据或者只返回符合筛选条件
方法返回一个查询结果的游标,这是一个产生文档的迭代对象
如果不传入任何参数,则返回所有结果
需要注意的是,如果你不指定不返回_id
,那么会默认返回这个项
你可以使用比较运算符之类的操作,具体见比较逻辑
查询参数
这些参数可以在查询时传入,也可以对查询结果进行处理
sort
对结果进行排序
1 |
|
- key: 用来排序的键
- ind: 排序顺序,可以填入1或-1
limit
限定返回的最大结果数量
1 |
|
skip
跳过指定数量的结果
1 |
|
常用操作
根据_id查询
1 |
|
比较查询
< | <= | > | >= | != |
---|---|---|---|---|
$lt | $lte | $gt | $gte | $ne |
如果你希望应对数据库中不存在的null,你可以在python中填入None来与之对应
案例:字段非空查询
1 |
|
更新
将某个数据记录的某系字段进行更改
- update_one()
修改匹配的第一条记录
第一个参数为查询的条件,第二个参数为要修改的字段案例:将name为DIO的记录的power项改为stander
1
2mycol.update_one(
{ "name": "DIO" }, { "$set": {'power":"stander" } }) - update_many()
修改匹配的所有记录
参数与update_one
是一样的案例:修改所有name是JO开头的power项值为1000000
1
mycol.update_many({"name": { "$regex": "^JO" } }, { "$set": { "power": "1000000" } })
替换
将旧的文档丢弃,传入一个新的文档替代原本的文档 - update()
替代文档对应原来的文档可以有不同的字段
替代文档可以忽略_id字段因为它是不变的。(如果你硬是要填入那它必须和原文档的值相同)1
2
3
4
5
6
7result = db.restaurants.replace_one(
{"_id": "5f60b67d7c68de24d1745024"},
{
"name": "DIO",
"power": "The World"
}
)
删除
文档
- delete_one()
删除第一个匹配的项案例:删除找寻出来第一个name为Jax的记录
1
mycol.delete_one({ "name": "Jax" })
- delete_many()
删除多个文档
如果不传入参数,则删除集合中的所有文档案例:删除所有name以F开头的记录
1
mycol.delete_many({ "name": {"$regex": "^F"} })
集合
- drop()
删除一个集合1
mycol.drop()
聚合
- aggregate
案例:
使用$group操作符去利用一个指定的键进行分组。在$group操作中,指定需要分组的字段为_id。$group通过字段路径访问字段,该字段需要有一个美元符号$作为前缀。$group操作可以使用累加器对本次分组进行计算。下面的例子将使用borough字段对restaurants集合进行操作,并且使用$sum累加器进行文档的统计计算。1
2
3
4
5cursor = db.restaurants.aggregate(
[
{"$group": {"_id": "$borough", "count": {"$sum": 1}}}
]
)其它操作
保存較大的二進制文件
将图片、文档等存入mogodb
中,需要用到两个模块,pymongo和gridfs
在存入过程中必须将文件转换为二进制的格式才能存入,存入mongoDB
中会生成两个文件 xxx.chunk 和 xxx.files
GridFS
是一种将大型文件存储在 MongoDB
的文件规范:数据库支持以BSON
格式保存二进制对象
但是MongoDB
中 BSON
对象 最大不能超过 4MB
GridFS
规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档
为实现这点,该规范指定了一个将文件分块的标准
每个文件都将在文件集合对象中保存一个元数据对象,一个或多个块对象可被组合保存在一个块集合中
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!