我正在使用一个太大而无法完全加载到内存中的 MongoDB 集合,我想使用 PyMongo 来处理它。
对于每个项目,我必须在另一个集合中进行搜索并将一个函数应用于结果。
我想出的第一个算法是:
for document in collection1.find():
field1 = document['field']
search = collection2.find({'field': field1})
# Do some stuff with the search
但是对每个元素执行搜索只会花费太多时间,因为它每次都必须等待服务器响应。
为了减少每个元素的等待时间,我尝试一次使用批量 - 比如说 500 个 - 文档。
我发现如何做到这一点的唯一方法是在游标上使用 next() 方法
cursor = collection1.find()
while cursor.alive:
batch_data = []
for i in range(500):
batch_data.append(cursor.next())
fields = [i['field'] for i in bath_data]:
search = collection2.find({'field': {"$in": fields}})
# map each result to the correct document and then do my stuff
然而,这似乎很hacky。有没有办法对集合执行搜索并将结果作为给定大小的批次列表返回?