Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

db.collection.distinct()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 옵션
  • 행동
  • 예시

드라이버가 포함된 MongoDB

이 페이지에서는 mongosh 메서드를 설명합니다. MongoDB 드라이버에서 해당 메서드를 보려면 프로그래밍 언어의 해당 페이지를 참조하세요.

C#Java SyncNode.jsPyMongoC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
db.collection.distinct(field, query, options)

단일 컬렉션이나 뷰에서 지정된 필드에 대한 고유 값을 찾고 결과를 배열로 반환합니다.

이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

참고

이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하십시오.

  • MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전

  • MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전

이 메서드는 다음 매개변수를 사용합니다.

Parameter
유형
설명
field
문자열
고유값을 반환할 필드입니다.
query
문서
고유 값을 검색할 문서를 지정하는 쿼리입니다.
options
문서
선택 사항입니다. 선택 사항을 지정하는 문서입니다. 옵션을 참조하세요.

참고

결과는 최대 BSON 크기보다 크지 않아야 합니다. 결과가 최대 BSON 크기를 초과하는 경우 집계 파이프라인을 사용하여 고유값 조회에 설명된 대로 집계 파이프라인을 사용하여 $group 연산자로 고유값을 검색합니다.

다음 다이어그램은 db.collection.distinct() 호출의 예를 보여줍니다.

주석이 달린 고유 연산 다이어그램입니다.
{ collation: <document> }
필드
유형
설명
collation
문서

선택 사항.

작업에 사용할 데이터 정렬을 지정합니다.

데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.

데이터 정렬 옵션의 구문은 다음과 같습니다:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

데이터 정렬을 지정할 때 locale 필드는 필수이고, 다른 데이터 정렬 필드는 모두 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.

데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우( db.createCollection() 참조), 작업은 컬렉션에 지정된 데이터 정렬을 사용합니다.

컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, 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, distinctaggregate 명령에 대한 쿼리 설정을 추가할 수 있습니다.

쿼리 설정은 더 많은 기능을 제공하며 더 이상 사용되지 않는 인덱스 필터보다 선호됩니다.

쿼리 설정을 제거 하려면 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() 및 배열 필드에 대한 자세한 내용은 동작 섹션을 참조하세요.

다음 예시에서는 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 } } )

필드에 대한 설명은 데이터 정렬 문서를 참조하세요.

돌아가기

db.collection.deleteOne