使用Flask迭代数组以输入PyMongo搜索

2024-10-06 12:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组,假设这个:

[ObjectId('5feceb11b5ffb79d03df04a0'), ObjectId('600c1c83e5c06febfb7f8ab5'), ObjectId('5fe8f9227221766fa23707d0'), ObjectId('5fe995f93137252b3bb37bbe')]

因此,我希望在数据库中找到每个ObjectId的概要文件

所以我需要做的就是这样:

person = mongo.db.users.find_one({"username": **each ObjectId**})

其中每个ObjectId是数组中的ObjectId之一

这样一来:

person == user1; and
person == user9; and
person == user13; and
person == user16

从那以后,我可能可以在Jinja中将其作为for循环进行管理


Tags: and文件数据库dbmongousername数组find
1条回答
网友
1楼 · 发布于 2024-10-06 12:20:08

如果要返回多个文档,请 也可以改为使用find()方法,但根据您的用例,您可能需要使用$in运算符,如果列表很大,该运算符可能会变慢,但如果成批执行,则会更好,从而将往返过程保存到db,并获得更好的性能

然后确保列表中的每个元素都有bsonObjectId类型而不是pythonstr,如果没有,可以通过导入将pythonstr类型转换为bsonObjectId 目标

>>> from bson import ObjectId
>>> print(type(ObjectId('5e9dc0548a4617a55665624f')))
>>> <class 'bson.objectid.ObjectId'>

因此,在确保您有一个ObjectId列表之后,您可以使用find$in进行查询,如下所示:

>>> users = [ObjectId('5e9dc0548a4617a55665624f'),ObjectId('5e9dc0a75db97122a193aa51')]
>>> q = collection.find({'username': { "$in": users}})

相关问题 更多 >