$sample (집계)
정의
$sample
입력 문서에서 지정된 수의 문서를 임의로 선택합니다.
$sample
단계의 구문은 다음과 같습니다.{ $sample: { size: <positive integer N> } } N
는 무작위로 선택할 문서 수입니다.
행동
다음 조건이 모두 true이면 $sample
의사 무작위 커서를 사용하여 N
문서를 선택합니다:
$sample
는 파이프라인의 첫 번째 단계입니다.N
컬렉션에 있는 전체 문서의 5% 미만입니다.이 컬렉션에는 100개 이상의 문서가 포함되어 있습니다.
이전 조건 중 하나라도 거짓이면 $sample
:
이전 집계 단계 또는 컬렉션 스캔에서 출력된 모든 문서를 읽습니다.
무작위 정렬을 수행하여
N
개의 문서를 선택합니다. 임의 정렬에는 정렬 메모리 제한이적용됩니다.참고
뷰는 집계 파이프라인의 결과입니다. 뷰에서
$sample
를 사용하면 MongoDB는 뷰의 집계 파이프라인 구문 끝에 해당 단계를 추가합니다. 따라서 뷰의$sample
단계는 첫 번째 단계가 아니며 항상 컬렉션 스캔으로 이어집니다.
샤드 샤딩된 클러스터 에서 $sample
을 사용하는 경우 각 샤드 는 샘플 작업을 독립적으로 수행합니다. mongos
는 각 샤드의 샘플 작업에 대한 병합된 결과를 샘플링하고 요청된 문서 수를 반환합니다.
예시
이 섹션에서는 다음 users
컬렉션을 사용하는 집계 파이프라인의 예를 보여줍니다.
db.users.insertMany( [ { _id : 1, name : "dave123", q1 : true, q2 : true }, { _id : 2, name : "dave2", q1 : false, q2 : false }, { _id : 3, name : "ahn", q1 : true, q2 : true }, { _id : 4, name : "li", q1 : true, q2 : false }, { _id : 5, name : "annT", q1 : false, q2 : true }, { _id : 6, name : "li", q1 : true, q2 : true }, { _id : 7, name : "ty", q1 : false, q2 : true } ] )
다음 집계 작업은 컬렉션에서 3
개의 문서를 무작위로 선택합니다.
db.users.aggregate( [ { $sample: { size: 3 } } ] )
이 작업은 세 개의 무작위 문서를 반환합니다.