개요
이 가이드 에서는 Ruby 운전자 사용하여 컬렉션 전체에서 지정된 필드 의 고유 값을 조회 방법을 학습 수 있습니다.
컬렉션 내에서 문서에는 단일 필드 에 대해 서로 다른 값이 포함될 수 있습니다. 예시 들어 restaurants 컬렉션 의 한 문서 는 borough 값이 'Manhattan'이고 다른 문서의 borough 값은 'Queens'입니다. Ruby 운전자 사용하여 컬렉션 의 여러 문서에서 필드 에 포함된 고유 값을 모두 조회 수 있습니다.
샘플 데이터
이 가이드 의 예제에서는 Atlas 샘플 데이터 세트의 sample_restaurants 데이터베이스 에 있는 restaurants 컬렉션 사용합니다. Ruby 애플리케이션 에서 이 컬렉션 에 액세스 하려면 Atlas cluster 에 연결하는 Mongo::Client 객체 만들고 database 및 collection 변수에 다음 값을 할당합니다.
database = client.use('sample_restaurants') collection = database[:restaurants]
무료 MongoDB Atlas cluster 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 MongoDB 시작하기 가이드 참조하세요.
Retrieve Distinct Values
지정된 필드의 고유 값을 검색하려면 distinct 메서드를 호출하고 고유 값을 찾으려는 필드의 이름을 전달합니다.
컬렉션 전체에서 값 검색
다음 예에서는 restaurants 컬렉션에 있는 borough 필드의 고유 값을 검색합니다.
results = collection.distinct('borough') results.each do |value| puts value end
Bronx Brooklyn Manhattan Missing Queens Staten Island
이 작업은 각 고유 borough 필드 값을 저장하는 배열 을 반환합니다. 여러 문서의 borough 필드 에 동일한 값이 있더라도 각 값은 결과에 한 번만 표시됩니다.
지정된 문서에서 값 검색
distinct 메서드에 쿼리 필터 를 제공하여 컬렉션의 문서 하위 집합에서 고유 필드 값을 찾을 수 있습니다. 쿼리 필터하다 는 작업에서 문서를 일치시키는 데 사용되는 검색 기준을 지정하는 표현식 입니다.
팁
쿼리 필터하다 만드는 방법에 대해 자세히 학습 쿼리 지정 가이드 참조하세요.
다음 예에서는 cuisine 필드 값이 'Italian' 인 모든 문서에 대해 borough 필드의 고유 값을 검색합니다.
results = collection.distinct('borough', { cuisine: 'Italian' }) results.each do |value| puts value end
Bronx Brooklyn Manhattan Queens Staten Island
고유 동작 수정
옵션 값을 지정하는 Hash 객체 전달하여 distinct 메서드의 동작을 수정할 수 있습니다. 다음 표에서는 작업을 사용자 지정하기 위해 설정하다 수 있는 옵션에 대해 설명합니다.
옵션 | 설명 |
|---|---|
| The collation to use for the operation. Type: Hash |
| The maximum amount of time in milliseconds that the operation can run. Type: Integer |
| The read preference to use for the operation. To learn more, see
Read Preference in the MongoDB Server manual. Type: Hash |
| The session to use for the operation. Type: Session |
다음 예시 borough 필드 값이 'Bronx' 이고 cuisine 필드 값이 'Pizza'인 모든 문서에 대해 name 필드 의 고유 값을 검색합니다. 또한 primary_preferred 읽기 설정 (read preference) 사용하도록 작업에 지시하는 read 옵션을 설정합니다.
filter = { borough: 'Bronx', cuisine: 'Pizza' } options = { read: { mode: :primary_preferred } } results = collection.distinct('name', filter, options) results.each do |value| puts value end
$1.25 Pizza 18 East Gunhill Pizza 2 Bros Aenos Pizza Alitalia Pizza Restaurant Amici Pizza And Pasta Angie'S Cafe Pizza Anthony & Joe'S Pizza Anthony'S Pizza Antivari Pizza Arturo'S Pizza Bartow Pizza ...
API 문서
메서드에 대해 distinct 자세히 학습 API 설명서를 참조하세요.