2017-05-15 2 views
0

Mongodb 문서를 임의의 순서로 정렬하는 방법을 찾고 있습니다.PyMongo를 사용하여 Mongodb 문서를 뒤섞기

PyMongo의 API 또는 StackOverflow에 대한 해결책을 찾지 못했습니다.

대용량 DB로 작업하기 때문에 목록 기반 솔루션이나 다른 메모리 소비 솔루션은 적합하지 않습니다.

답변

0

MongoDB에는 "임의로 정렬"기능이 없습니다. 당신이 RAM에 맞게 몇 충분한 서류가있는 경우에는 목록에 그들 모두를 가져오고 파이썬 표준 라이브러리의 random.shuffle 사용할 수 있습니다 : 당신은 아마 $sample 집계 운영자가 할 것입니다 달성하려고하는 결과

import random 
import pymongo 

collection = pymongo.MongoClient().db.collection 
docs = random.shuffle(list(collection.find())) 
+0

내가 찾고있는 해결책이 아니므로 막대한 양의 데이터로 작업 중이므로 스트림을 사용하고 메모리를 사용하고 싶지 않습니다. Iv'e이 내 질문을 편집했습니다. –

0

이 말에 따라 일.

cursor = your_collection.aggregate([{'$sample': {'size': your_collection.count()}}], allowDiskUse=True) 

이 당신에게 당신이 정확한 동작을 위해

for document in cursor: 
    print (document) 
  • 는 또 다른 (복잡한) 대체 작업 어디 감소 /지도 할 수있는 documentation
  • 을 읽을 반복 할 수 임의의 집합 커서를 줄 것이다 당신은 문서의 나머지 부분을 따라 임의의 숫자를 내 보낸 다음 이것으로 정렬 할 수 있습니다.
+0

문서에서 $ sample은 같은 문서를 두 번 이상 선택하고 다음과 같은 몇 가지 요구가있을 수 있다고 말합니다. - N이 모음의 총 문서 수의 5 % 미만입니다. - 컬렉션에 100 개가 넘는 문서가 포함되어 있습니다. 이 방법은 내 작업과 관련성이 적습니다. –

+0

틀린 경우 1) $ sample은 동일한 문서를 두 번 이상 선택하지 않습니다. 작업 중에 문서를 수정하는 경우에만 가능합니다 (커서 분리 참조) 2) N> 5 % 인 경우에도 임의의 문서가 표시 되더라도 임의의 정렬을 통해 - 즉 : 메서드 변경 최종 결과가 동일합니다. – nickmilon

관련 문제