너무 커서 메모리에 완전히로드 할 수없는 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
에 다음() 메소드를 사용하고이 작업을 수행하는 방법을 발견하는 유일한 방법. 컬렉션에 대한 검색을 수행하고 결과를 주어진 크기의 일괄 처리 목록으로 반환 할 수있는 방법이 있습니까?
PyMongo는 $ lookup을 지원하기 위해 아무 것도 할 필요가 없으며 지정한 연산자와 상관없이 전체 집계 파이프 라인을 서버로 전달합니다. –
고맙습니다. 그 점을 명심하십시오. –