인덱스 만들기
인덱스는 MongoDB에서 쿼리를 효율적으로 실행할 수 있도록 지원합니다. 필드에 인덱스를 만들려면 인덱스 사양 문서를 MongoCollection.createIndex()
메서드에 전달합니다.
Java Reactive Streams 드라이버는 다양한 MongoDB 인덱스 키 유형에 대한 인덱스 사양 문서를 생성하기 위한 정적 팩토리 메서드가 포함된 Indexes
클래스를 제공합니다. 인덱스 유형에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 인덱스 를 참조하세요.
참고
MongoDB는 동일한 사양의 인덱스가 아직 존재하지 않는 경우에만 인덱스를 생성합니다.
전제 조건
이 가이드의 코드 예제를 실행하려면 프로그램에 다음 가져오기 문을 포함해야 합니다.
import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoDatabase; import com.mongodb.reactivestreams.client.MongoCollection; import org.bson.Document; import com.mongodb.client.model.Indexes; import com.mongodb.client.model.IndexOptions; import com.mongodb.client.model.Filters;
중요
이 가이드에서는 퀵 스타트 프라이머에 설명된 Subscriber
구현을 사용합니다.
MongoDB 배포에 연결하기
먼저 MongoDB deployment에 연결한 다음 MongoDatabase
및 MongoCollection
인스턴스를 선언하고 정의합니다.
다음 코드는 포트 27017
의 localhost
에서 실행되는 독립형 MongoDB 배포서버에 연결합니다. 그런 다음 test
데이터베이스를 참조하는 database
변수와 restaurants
컬렉션을 참조하는 collection
변수를 정의합니다.
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
MongoDB deployment에 연결하는 방법에 대해 자세히 알아보려면 MongoDB에 연결 튜토리얼을 참조하세요.
오름차순 인덱스
오름차순 인덱스에 대한 사양을 만들려면 Indexes.ascending()
정적 헬퍼 메서드를 사용합니다.
단일 오름차순 인덱스
다음 예에서는 name
필드에 오름차순 인덱스를 생성합니다.
collection.createIndex(Indexes.ascending("name")) .subscribe(new PrintToStringSubscriber<String>());
복합 오름차순 인덱스
다음 예에서는 stars
필드와 name
필드에 오름차순 복합 인덱스를 생성합니다.
collection.createIndex(Indexes.ascending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
복합 인덱스를 생성하는 다른 방법을 보려면 복합 인덱스 섹션을 참조하세요.
내림차순 인덱스
내림차순 인덱스의 사양을 만들려면 Indexes.descending()
정적 헬퍼 메서드를 사용합니다.
단일 내림차순 키 인덱스
다음 예에서는 stars
필드에 내림차순 인덱스를 생성합니다.
collection.createIndex(Indexes.descending("stars")) .subscribe(new PrintToStringSubscriber<String>());
복합 내림차순 키 인덱스
다음 예에서는 stars
필드와 name
필드에 내림차순 복합 인덱스를 생성합니다.
collection.createIndex(Indexes.descending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
복합 인덱스를 생성하는 다른 방법을 보려면 복합 인덱스 섹션을 참조하세요.
복합 인덱스
복합 인덱스에 대한 사양을 만들려면 Indexes.compoundIndex()
정적 헬퍼 메서드를 사용합니다.
참고
모든 키가 오름차순인 복합 인덱스에 대한 사양을 만들려면 ascending()
메서드를 사용할 수 있습니다. 모든 키가 내림차순인 복합 인덱스에 대한 사양을 만들려면 descending()
메서드를 사용할 수 있습니다.
다음 예에서는 stars
필드에 내림차순으로 name
필드에 오름차순으로 복합 인덱스를 생성합니다.
collection.createIndex( Indexes.compoundIndex(Indexes.descending("stars"), Indexes.ascending("name")) ).subscribe(new PrintToStringSubscriber<String>());
텍스트 인덱스
MongoDB 는 string 콘텐츠의 텍스트 Atlas Search를 지원하기 위해 텍스트 인덱스를 제공합니다. 텍스트 인덱스에는 값이 string 또는 string 요소의 배열인 모든 필드가 포함될 수 있습니다. 텍스트 인덱스에 대한 사양을 만들려면 Indexes.text()
정적 헬퍼 메서드를 사용합니다.
다음 예시에서는 name
필드에 텍스트 인덱스를 생성합니다.
collection.createIndex(Indexes.text("name")) .subscribe(new PrintToStringSubscriber<String>());
해시 인덱스
해시된 인덱스 인덱스에 대한 사양을 만들려면 Indexes.hashed()
정적 헬퍼 메서드를 사용합니다.
다음 예에서는 _id
필드에 해시 인덱스를 생성합니다.
collection.createIndex(Indexes.hashed("_id")) .subscribe(new PrintToStringSubscriber<String>());
지리 공간적 인덱스
지리 공간적 쿼리를 지원하기 위해 MongoDB는 다양한 지리 공간적 인덱스를 지원합니다.
2dsphere
2dsphere
인덱스에 대한 사양을 만들려면 Indexes.geo2dsphere()
정적 헬퍼 메서드를 사용합니다.
다음 예제에서는 contact.location
필드에 2dsphere
인덱스를 생성합니다.
collection.createIndex(Indexes.geo2dsphere("contact.location")) .subscribe(new PrintToStringSubscriber<String>());
인덱스 옵션
인덱스 사양 문서 외에도 createIndex()
메서드는 드라이버에 고유 인덱스 또는 부분 인덱스를 생성하도록 지시하는 인덱스 옵션 문서를 사용할 수 있습니다.
드라이버는 다양한 인덱스 옵션을 지정하기 위해 IndexOptions
클래스를 제공합니다.
코드에 다음 가져오기 문을 추가하여 IndexOptions
인스턴스를 만듭니다.
import com.mongodb.client.model.IndexOptions;
고유 인덱스
다음 코드는 name
및 stars
필드에 고유 인덱스를 생성하는 unique(true)
옵션을 지정합니다.
IndexOptions indexOptions = new IndexOptions().unique(true); collection.createIndex(Indexes.ascending("name", "stars"), indexOptions) .subscribe(new PrintToStringSubscriber<String>());
부분 인덱스
부분 인덱스를 만들려면 partialFilterExpression
인덱스 옵션을 포함합니다.
다음 예에서는 status
필드의 값이 "A"
인 문서에 부분 인덱스를 생성합니다.
IndexOptions partialFilterIndexOptions = new IndexOptions() .partialFilterExpression(Filters.exists("contact.email")); collection.createIndex( Indexes.descending("name", "stars"), partialFilterIndexOptions) .subscribe(new PrintToStringSubscriber<String>());
컬렉션의 인덱스 목록 가져오기
listIndexes()
메서드를 사용하여 인덱스 목록을 가져옵니다. 다음 코드는 컬렉션의 인덱스를 나열합니다.
collection.listIndexes().subscribe(new PrintDocumentSubscriber());
다른 인덱스 옵션에 대해 알아보려면 서버 매뉴얼의 인덱스 속성 을 참조하세요.