motor 提供find_one方法从mongo的集合中查询出一条符合查询条件的数据,find方法则能够查询出所有符合查询条件的数据
import pprint
import asyncio
import motor.motor_asyncio
uri = "mongodb://kwsy:123456@localhost:27017/app"
client = motor.motor_asyncio.AsyncIOMotorClient(uri)
db = client.app
async def do_find_one(db, query):
document = await db.user.find_one(query)
pprint.pprint(document)
loop = asyncio.get_event_loop()
loop.run_until_complete(do_find_one(db, {"age": 14}))
本示例中,我为协程函数do_find_one 增加了参数,分别传入db对象和查询条件,在使用run_until_complete方法执行协程时,可以通过传入参数修改查询条件。
程序执行结果
{'_id': ObjectId('6266826719838b5a3ccf7ae5'), 'age': 14, 'name': '小红'}
find_one 只能返回一条符合查询条件的数据,而find方法可以返回所有符合查询条件的数据
import pprint
import asyncio
import motor.motor_asyncio
uri = "mongodb://kwsy:123456@localhost:27017/app"
client = motor.motor_asyncio.AsyncIOMotorClient(uri)
db = client.app
async def do_find(db, query):
cursor = db.user.find(query)
datas = await cursor.to_list(length=100)
for data in datas:
pprint.pprint(data)
loop = asyncio.get_event_loop()
loop.run_until_complete(do_find(db, {"age": {"$gte": 14}}))
to_list 方法要求必须提供length对象,这个方法会一次性返回最多length个数据,这些数据都会加载到内存中,因此才要求必须提供length, 提醒你注意数量,将集合里所有数据都加载到内存中是不合理的,遍历全部数据可以使用下面的方法
import pprint
import asyncio
import motor.motor_asyncio
uri = "mongodb://kwsy:123456@localhost:27017/app"
client = motor.motor_asyncio.AsyncIOMotorClient(uri)
db = client.app
async def do_find(db, query):
cursor = db.user.find(query)
async for data in cursor:
pprint.pprint(data)
loop = asyncio.get_event_loop()
loop.run_until_complete(do_find(db, {"age": {"$gte": 14}}))
程序查询age大于等于14的文档, 程序输出结果
{'_id': ObjectId('6266826719838b5a3ccf7ae5'), 'age': 14, 'name': '小红'}
{'_id': ObjectId('626683be9c66e2bbe3d5ad49'), 'age': 14, 'name': '小红'}
{'_id': ObjectId('626683be9c66e2bbe3d5ad4a'), 'age': 15, 'name': '小明'}
QQ交流群: 211426309