python - 获取以给定大小的列表列表形式返回的 pymongo .find() 结果

标签 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

但是对每个元素执行搜索只会花费太多时间,因为它每次都必须等待服务器响应。

为了减少每个元素的等待时间,我尝试一次使用一批 - 比如 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 或更高版本,您可以尝试 $lookup operator在聚合框架中。它相当于关系数据库中的左外连接。但我不确定 pymongo 是否支持它。如果它不支持它,也许您可​​以使用 $limit 和 $skip 运算符不将所有集合加载到内存中。您可以从 here. 获得 pymongo 文档

关于python - 获取以给定大小的列表列表形式返回的 pymongo .find() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42398177/

相关文章:

python - 如何在列表中将大写字母转换为小写字母?

c# - 无法从 IMongoQueryable mongodb C# 驱动程序 linq 语句上的 GroupBy 中的组获取​​组项目

python - 如何为ReferenceField mongoengine创建索引

python - MongoEngine 中的批量写入

Python 从多个单独的变量构建数据框

python - 如何将二进制(字符串)转换为浮点值?

python - Linux 上 Python 中的随机数生成器

mongodb - mongodb go driver中维护了bson.M数组的顺序吗?

mongodb - Pymongo 批量插入不起作用

python - 如何从pymongo中的列表中查询一个元素