随手记录一些使用过程中的基本操作,读者需要对mongodb的mongoshell指令有一定基础
下文代码中所有query
,db_name
,collection_name
需替换为实际情况
目录
连接数据库
from pymongo.mongo_client import MongoClient
from pymongo.server_api import ServerApi
uri = "mongodb://username:password@host:port"
client = MongoClient(uri, server_api = ServerApi('1'))
查询指定集合中文档除_id字段外的所有字段
client['db_name']['collection_name'].find({query}, {'_id': False})
文档中插入时间
import datetime
date = datetime.datetime.now()
client['db_name']['collection_name'].update({query}, {'$set': {"date": date}})
查询类型为时间的字段
假设字段名称为date
,起始时间为startTime
,结束时间为endTime
,都是datetime
类型
client['db_name']['collection_name'].find({'date': {'$gte': startTime, '$lte': endTime}})
查询类型为数组的字段
假设字段名称为arr
,需要查询的元素为ele1
以及ele2
如果二者为“或”的关系,即查询所有包含ele1
或者ele2
的文档,用$in
运算符
client['db_name']['collection_name'].find({'arr': {'$in': [ele1, ele2]}})
如果二者为“且”的关系,即查询所有包含ele1
以及ele2
的文档,用$all
运算符
client['db_name']['collection_name'].find({'arr': {'$all': [ele1, ele2]}})
upsert的使用
upsert
即update + insert,顾名思义,根据查询条件,如果该文档存在则更新,不存在则创建,非常适用于一些爬虫的数据库。update
和update_one
方法的第3个参数即为upsert
,默认为False
client['db_name']['collection_name'].update_one({query}, {'$set': {}}, True)
find_and_delete的使用
find_and_delete
以及find_one_and_delete
在查询后会删除查询到的文档,并返回这些文档,适用于一些一次性数据,如果没有查询到,则返回None
,基本用法和find
一致
results = client['db_name']['collection_name'].find_and_delete({query})
if results:
pass # Do something
else:
pass # Do something