db.collection.distinct()
드라이버가 포함된 MongoDB
이 페이지에서는 mongosh
메서드를 설명합니다. MongoDB 드라이버에서 해당 메서드를 보려면 프로그래밍 언어의 해당 페이지를 참조하세요.
정의
호환성
이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0, M2 및 M5 클러스터에서 제한적으로 지원 됩니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
이 메서드는 다음 매개변수를 사용합니다.
Parameter | 유형 | 설명 |
---|---|---|
field | 문자열 | 고유값을 반환할 필드입니다. |
query | 문서 | 고유 값을 검색할 문서를 지정하는 쿼리입니다. |
options | 문서 | 선택 사항입니다. 선택 사항을 지정하는 문서입니다. 옵션을 참조하세요. |
참고
결과는 최대 BSON 크기보다 크지 않아야 합니다. 결과가 최대 BSON 크기를 초과하는 경우 집계 파이프라인을 사용하여 고유값 조회에 설명된 대로 집계 파이프라인을 사용하여 $group
연산자로 고유값을 검색합니다.
다음 다이어그램은 db.collection.distinct()
호출의 예를 보여줍니다.
옵션
{ collation: <document> }
필드 | 유형 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
collation | 문서 | 선택 사항. 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. 데이터 정렬 옵션의 구문은 다음과 같습니다:
데이터 정렬을 지정할 때 데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다. 한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다. |
행동
샤딩된 클러스터에서 distinct
명령은 고아 문서를 반환할 수 있습니다.
Time Series 컬렉션의 경우 distinct
명령은 인덱스를 효율적으로 활용할 수 없습니다. 대신 $group
집계를 사용하여 고유한 값으로 문서를 그룹화하세요. 자세한 내용은 Time Series 제한 사항을 참조하세요.
필드 배열
지정된 field
의 값이 배열인 경우 db.collection.distinct()
(은)는 배열의 각 요소를 별도의 값으로 간주합니다.
예를 들어 필드에 [ 1, [1], 1 ]
값이 있는 경우 db.collection.distinct()
는 1
, [1]
, 1
을 별도의 값으로 간주합니다.
예시를 보려면 배열 필드에 대한 고유 값 반환을 참조하세요.
인덱스 사용하기
가능한 경우 db.collection.distinct()
작업은 인덱스를 사용할 수 있습니다.
인덱스는 db.collection.distinct()
작업도 처리 할 수 있습니다. 인덱스가 처리하는 쿼리에 대한 자세한 내용은 처리된 쿼리를 참조하세요.
트랜잭션
트랜잭션 내에서 고유한 작업을 수행합니다.
샤딩되지 않은 컬렉션의 경우,
db.collection.distinct()
메서드/distinct
명령은 물론$group
단계의 집계 파이프라인도 사용할 수 있습니다.샤딩된 컬렉션의 경우
db.collection.distinct()
메서드 또는distinct
명령을 사용할 수 없습니다.샤드 컬렉션의 고유값을 찾으려면 대신
$group
단계의 집계 파이프라인을 사용합니다. 자세한 내용은 고유 작업을 참조하세요.
중요
대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.
추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.
클라이언트 연결 해제
MongoDB 4.2부터 db.collection.distinct()
를 발급한 클라이언트가 작업이 완료되기 전에 연결을 끊는 경우, MongoDB는 db.collection.distinct()
를 사용하여 를killOp
을 종료로 표시합니다.
복제본 세트 구성원 국가 제한
복제본 세트 노드에서 실행하는 경우 distinct
연산을 수행하려면 노드가 PRIMARY
또는 SECONDARY
상태여야 합니다. 노드가 STARTUP2
와 같은 다른 상태이면 연산 오류가 발생합니다.
쿼리 설정
버전 8.0에 추가 되었습니다.
쿼리 설정을 사용하여 인덱스 힌트를 설정하고, 작업 거부 필터 및 기타 필드를 설정할 수 있습니다. 해당 설정은 전체 클러스터의 쿼리 형태에 적용됩니다. 클러스터는 종료 후에도 설정을 유지합니다.
쿼리 옵티마이저는 쿼리 계획 중 추가 입력으로 쿼리 설정을 사용하여 쿼리를 실행할 계획에 영향을 미칩니다. 쿼리 설정을 사용하여 쿼리 형태를 차단할 수도 있습니다.
쿼리 설정을 추가하고 예시를 살펴보려면 setQuerySettings
를 참조하세요.
find
, distinct
및 aggregate
명령에 대한 쿼리 설정을 추가할 수 있습니다.
쿼리 설정은 더 많은 기능을 제공하며 더 이상 사용되지 않는 인덱스 필터보다 선호됩니다.
쿼리 설정을 제거 하려면 removeQuerySettings
를 사용합니다. 쿼리 설정을 가져오려면 집계 파이프라인 에서 $querySettings
단계를 사용합니다.
예시
이 예시에서는 다음 문서가 포함된 inventory
collection을 사용합니다.
{ "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] } { "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] } { "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" } { "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }
필드에 대한 고유 값 반환
다음 예시에서는 inventory
컬렉션의 모든 문서에서 dept
필드에 대한 고유 값을 반환합니다.
db.inventory.distinct( "dept" )
이 메서드는 다음과 같은 고유 dept
값의 배열을 반환합니다.
[ "A", "B" ]
포함된 필드에 대한 고유 값 반환
다음 예시에서는 inventory
collection의 모든 문서에서 item
필드에 포함된 sku
필드의 고유 값을 반환합니다.
db.inventory.distinct( "item.sku" )
이 메서드는 다음과 같은 고유 sku
값의 배열을 반환합니다.
[ "111", "222", "333" ]
배열 필드에 대한 고유 값 반환
다음 예시에서는 inventory
컬렉션의 모든 문서에서 sizes
필드에 대한 고유 값을 반환합니다.
db.inventory.distinct( "sizes" )
이 메서드는 다음과 같은 고유 sizes
값의 배열을 반환합니다.
[ "M", "S", "L" ]
distinct()
및 배열 필드에 대한 자세한 내용은 동작 섹션을 참조하세요.
(으)로 쿼리 지정하기 distinct
다음 예시에서는 dept
가 "A"
인 문서에서 item
필드에 포함된 sku
필드의 고유 값을 반환합니다.
db.inventory.distinct( "item.sku", { dept: "A" } )
이 메서드는 다음과 같은 고유 sku
값의 배열을 반환합니다.
[ "111", "333" ]
데이터 정렬 지정
데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.
컬렉션 myColl
에는 다음 문서가 있습니다.
{ _id: 1, category: "café", status: "A" } { _id: 2, category: "cafe", status: "a" } { _id: 3, category: "cafE", status: "a" }
다음 집계 작업에는 데이터 정렬 옵션이 포함됩니다.
db.myColl.distinct( "category", {}, { collation: { locale: "fr", strength: 1 } } )
필드에 대한 설명은 데이터 정렬 문서를 참조하세요.