Ich arbeite mit einer MongoDB-Sammlung, die zu groß ist, um vollständig in Arbeitsspeicher geladen zu werden, und ich möchte mit PyMongo damit arbeiten.Get pymongo .find() Ergebnis als Liste von Listen einer bestimmten Größe zurückgegeben
Für jedes Element muss ich in einer anderen Sammlung suchen und eine Funktion auf das Ergebnis anwenden.
Der erste Algorithmus kam ich mit war:
for document in collection1.find():
field1 = document['field']
search = collection2.find({'field': field1})
# Do some stuff with the search
Aber eine Suche für jedes Element einfach zu viel Zeit Durchführung dauert, weil es für die Server-Antwort jedes Mal warten muss.
Um die Wartezeit pro Element zu reduzieren, versuche ich, Chargen von -say, 500 - Dokumente gleichzeitig zu verwenden.
Der einzige Weg, fand ich, wie dies zu tun ist auf einem Cursor die nächste() Methode verwendet
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
dies sehr hacky scheint jedoch. Gibt es eine Möglichkeit, eine Suche in einer Sammlung durchzuführen und das Ergebnis als Liste von Stapeln einer bestimmten Größe zurückgeben zu lassen?
PyMongo muss nichts tun, um $ lookup zu unterstützen, es übergibt Ihre gesamte Aggregation Pipeline an den Server, egal, welche Operatoren Sie angeben. –
Danke, das werde ich mir merken. –