python - 在 mongodb 中查询大列表的最快方法

标签 python mongodb performance search pymongo

我想从 mongodb 获取大量用户的详细信息。 用户列表超过10万。 由于 mongodb 不支持一次性查询非常大的数据。 我想知道获取数据的最佳方式。

  1. 分组列表并获取数据

groups_of_list contains list of userId with bunches of 10000

for group in groups_of_list:
    curr_data = db.collection.find({'userId': {'$in': group}})
    data.append(curr_data)
  1. 遍历集合
for doc in db.collection.find({}):
   if i['userId'] in set_of_userIds:
       data.append(doc)

我想获得禁食法。

如果有更好的方法/途径,请指出。

最佳答案

恕我直言,您应该像您指出的方法 1 中那样分成“合理大小”的 block ,这不是因为 Mongo 的限制,而是因为您自己机器的内存限制。

大概应该是这样的:

def get_user_slice_data(groups_of_list):
    for group in groups_of_list:
        yield list(db.collection.find({'userId': {'$in': group}}))

这个生成器函数可以这样使用:

for use_slice_data in get_user_slice_data(groups_of_list):
    # do stuff

通过这样做,您既可以避免内存中有大量数据,也可以减少 Mongo 事务的大小。

pd:您可能应该首先考虑在“userId”上添加索引,例如:

db.collection.ensure_index('userId')

关于python - 在 mongodb 中查询大列表的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523087/

相关文章:

python - Github工作人员找不到python脚本

python - 找不到snakemake线程通配符

mongodb - 如何为 Twitter 文章聚合器设计 MongoDB 模式

mongodb 仅在保持 ssh 连接时运行

javascript - 异常缓慢的 Javascript 循环

python - 尝试使用 SST Python 接受警报时出现 NoAlertPresentException

python - Flask 网络应用程序(Python 2.7)

c# - 无法在 MongoDb 集合查询中将 ObjectId 反序列化为 String

c++ - 为什么排序组的分组求和比未排序的组慢?

c++ - C++ 中默认参数的成本