Python Get pymongo.find()结果作为给定大小的列表列表返回

Python Get pymongo.find()结果作为给定大小的列表列表返回,python,mongodb,pymongo,pymongo-3.x,Python,Mongodb,Pymongo,Pymongo 3.x,我使用的MongoDB集合太大,无法完全加载到内存中,我希望使用PyMongo处理它 对于每个项目,我必须在另一个集合中进行搜索,并对结果应用函数 我想到的第一个算法是: for document in collection1.find(): field1 = document['field'] search = collection2.find({'field': field1}) # Do some stuff with the search 但是对每个元素执

我使用的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

然而,这似乎非常骇人。是否有方法对集合执行搜索,并将结果作为给定大小的批列表返回?

如果我理解正确,您正在尝试将一个字段上的两个集合合并。如果您使用的是MongoDB 3.2或更高版本,可以在聚合框架中尝试。它相当于关系数据库中的左外联接。但我不确定pymongo是否支持它。如果它不支持,也许可以使用$limit和$skip操作符不将所有集合加载到内存中。您可以从

访问pymongo文档pymongo不需要做任何事情来支持$lookup,它将您的整个聚合管道传递到服务器,而不管您指定什么操作符。