私はMongoDBのコレクションがメモリに完全に読み込まれるほど大きく、PyMongoを使用して作業したいと考えています。pymongo .find()の結果が指定されたサイズのリストとして返されました
それぞれのアイテムについて、別のコレクションで検索して結果に関数を適用する必要があります。
最初のアルゴリズム私がいた思い付いた:それはサーバの応答を毎回待たなければならないため
for document in collection1.find():
field1 = document['field']
search = collection2.find({'field': field1})
# Do some stuff with the search
しかし、各要素の検索を実行するには、あまりにも多くの時間を要します。
要素ごとの待機時間を短縮するために、一度に500件ずつの文書を使用しようとしています。
私はこれを行う方法を見つけた唯一の方法は、しかし、これは非常にハックように見えるカーソル
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
のnext()メソッドを使用しています。コレクションの検索を実行し、その結果を所定のサイズのバッチのリストとして返す方法はありますか?
PyMongoは$ lookupをサポートするために何もする必要はなく、指定した演算子に関係なく、集約パイプライン全体をサーバーに渡します。 –
ありがとうございます、私はそれを念頭に置いておきます。 –