借助pymongo实现mongo的基本操作
1. 引入依赖
1 | import pymongo |
2. 建立连接
开始第一步就是连接mongodb,有两种常见的连接方式
方式一
1 | uri = "mongodb://user:password@localhost:port/the_database?authMechanism=SCRAM-SHA-1" |
方式二
1 | client = MongoClient('localhost', |
说明
MongoDB 3.0(对应pymongo2.8)之后默认使用“SCRAM-SHA-1”加解密;之前使用的是“MONGODB-CR”,可以使用authMechanism指定;同时可以使用authSource指定应用加解密的database,默认是admin。
3. 获取db
指定操作的db,然后接下来就可以对db中的集合进行操作
1 | db = client['db_name'] |
4. 集合操作
a. 插入数据
1 | import datetime |
上面这个每执行一次,插入一个document,对于批量插入,可以使用 insert_many
函数,传入一个列表的参数即可
b. 查询
利用 find_one
查找一条匹配的文档
1 | record = db['test_collection'].find_one() |
如果需要排除查询文档中某些字段,可以通过设置field的值为0,
1 | record = db['test_collection'].find_one({}, {"_id": 0}) |
根据查询条件进行检索,可以如下使用
1 | record = db['test_collection'].find_one({"author": "Mike"}, {"_id": 0}) |
or查询
第一个参数,可以使用 { '$or': [ 查询条件, 查询条件 ] }
1 | record = db['test_collection'].find_one({'$or': [{"author": "Mike"}, {"author": "Jake"}], {"_id": 0}) |
and与or查询
字典中的不同的key组合就是and,基本语法为 db.col.find({key1:value1, key2:value2}).pretty()
1 | record = db['test_collection'].find_one({count: 12345, '$or': [{"author": "Mike"}, {"author": "Jake"}], {"_id": 0}) |
数字比较
不同于mysql直接使用符号,对于比较会用形如$lt
的符号来代替
操作 | 格式 | 实例 | 等效sql |
---|---|---|---|
等于 | {key: value} |
db['test_collection].find_one({'count': 123}) |
count=123 |
小于 | {key: {'$lt': value}} |
db['test_collection].find_one({'count': {'$lt': 123} }) |
count<123 |
小于或等于 | {key: {'$lte': value}} |
db['test_collection].find_one({'count': {'$lte': 123} }) |
count<=123 |
大于 | {key: {'$gt': value}} |
db['test_collection].find_one({'count': {'$gt': 123} }) |
count>123 |
大于或等于 | {key: {'$gte': value}} |
db['test_collection].find_one({'count': {'$gte': 123} }) |
count>=123 |
不等于 | {key: {'$ne': value}} |
db['test_collection].find_one({'count': {'$ne': 123} }) |
count!=123 |
c. 更新
更新提供了两种方式,一个是增量更新,一个是覆盖更新
增量更新update
语法定义如下
1 | db.collection.update( |
一个实际的更新case
1 | mycol.update_one({'author': 'Mike'}, {'$set': { 'text': 'hello', 'date': datetime.datetime.now()}}) |
覆盖更新save
语法定义如下
1 | db.collection.save({document}) |
这个表示用document的内容来替换已有文档,从接口签名上来看,不推荐使用这种方式
d. 删除
和查询的使用方式差不多,只不过最终的效果是删除而已
1 | db.collection.delete_one({query}) |
实例如下
1 | mycol.delete_one({'author': 'Mike'}) |
II. 其他
0. 参考
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 扫描关注
一灰灰blog
知识星球