Dhe*_*nde 6 python performance search mongodb pymongo
我想从 mongodb 获取大量用户的详细信息。用户列表超过10万。由于mongodb不支持一次性非常大的数据查询。我想知道哪种是获取数据的最佳方式。
groups_of_list 包含 10000 个用户 ID 的列表
Run Code Online (Sandbox Code Playgroud)for group in groups_of_list: curr_data = db.collection.find({'userId': {'$in': group}}) data.append(curr_data)
Run Code Online (Sandbox Code Playgroud)for doc in db.collection.find({}): if i['userId'] in set_of_userIds: data.append(doc)
我想得到禁食法。
如果有更好的方法/途径,请指出。
恕我直言,你可能应该像你指出的方法1那样分成“合理大小”的块,不是为了Mongo的限制,而是为了你自己机器的内存限制。
大概应该是这样的:
def get_user_slice_data(groups_of_list):
for group in groups_of_list:
yield list(db.collection.find({'userId': {'$in': group}}))
Run Code Online (Sandbox Code Playgroud)
这个生成器函数可以这样使用:
for use_slice_data in get_user_slice_data(groups_of_list):
# do stuff
Run Code Online (Sandbox Code Playgroud)
通过这样做,您既可以避免内存中存在大量数据,也可以减少 Mongo 事务的大小。
pd:您可能应该考虑首先在“userId”上添加索引,例如:
db.collection.ensure_index('userId')
Run Code Online (Sandbox Code Playgroud)