MongoDB에 ~ 600,000 개의 문서가있는 콜렉션이 있습니다. 그 중 정확히 절반은 필드를 0으로 설정하고 다른 필드는 1로 설정하는 동일한 필드를 가지고 있습니다. (PyMongo를 통해) 집계 파이프 라인에서 sample 작업을 사용하여이 컬렉션에서 무작위 샘플을 얻으려고하면 크게 왜곡됩니다 1 값쪽으로 초기 모음이 동일하게 배포되는 경우 해당 필드가 1MongoDB의 "임의"샘플이 크게 왜곡 된 결과를 반환합니다.
있는 필드가 0 300-400 기록하고 24,000 기록이있을 수 25,000 기록 샘플에서
는 이유는 이렇게 많이 다른 분포로 결과를 반환하는 $sample
의 사용과 컬렉션에서 대표 샘플을 얻으려면 어떻게해야합니까?
가 여기에 PyMongo의 I 쿼리를 위해 사용하고 라인이다 : MongoDB를 3.4.9의로
cursor = foo_database.bar_collection.aggregate([ { "$sample": { "size": 25000} } ])
['$ sample'] (https://docs.mongodb.com/manual/reference/operator/aggregation/sample/)은 서버에 구현되어 있으므로 언어 구현은 아무런 효과가 없습니다. 'size' 이외의 다른 인수 옵션은 없으므로, 이것은 매우 "블랙 박스"이며 구현 될 때 바로 동작합니다. 특정 값에 대해 "고르게 분포"될 것으로 예상되는 경우 실제로는 "두 개"이상의 작업이 필요하며 균등하게 분배 할 것으로 예상되는 값마다 하나씩 있어야합니다. 그렇지 않으면 의도 한대로 단순히 "임의"입니다. –