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

Dhe*_*nde 6 python performance search mongodb pymongo

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

  1. 将列表分组并获取数据

groups_of_list 包含 10000 个用户 ID 的列表

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

我想得到禁食法。

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

lea*_*day 3

恕我直言,你可能应该像你指出的方法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)