Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java를 활용해 MongoDB에서 인덱스 삭제하는 방법

MongoDB 인덱스 삭제 개요

MongoDB에서 특정 인덱스를 삭제하려면 dropIndex() 메서드를 사용해야 합니다. 셸 환경에서는 다음과 같은 형식으로 호출합니다.

기본 문법

db.COLLECTION_NAME.dropIndex({KEY:1})

Java 드라이버에서도 동일하게 dropIndex() 메서드를 사용해 인덱스를 삭제할 수 있습니다. 이 메서드에는 인덱스의 정렬 방식(오름차순 또는 내림차순)과 해당 인덱스가 생성된 필드의 이름을 매개변수로 전달해야 합니다.

dropIndex(Indexes.ascending("name"));

예제 코드

아래 예제에서는 sampleCollection 컬렉션에 age 필드와 name 필드에 각각 오름차순 인덱스를 생성한 뒤, 그중 name 인덱스를 삭제하고 삭제 전후의 인덱스 목록을 확인합니다.

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Indexes;
import org.bson.Document;
import com.mongodb.MongoClient;

public class DroppingIndex {
    public static void main(String args[]) {
        // MongoDB 클라이언트 생성
        MongoClient mongo = new MongoClient("localhost", 27017);
        // 데이터베이스 접근
        MongoDatabase database = mongo.getDatabase("myDatabase");
        // 컬렉션 생성
        database.createCollection("sampleCollection");
        // 인덱스를 생성할 컬렉션 가져오기
        MongoCollection coll = database.getCollection("sampleCollection");
        // 인덱스 생성
        coll.createIndex(Indexes.ascending("age"));
        coll.createIndex(Indexes.ascending("name"));
        System.out.println("인덱스 목록:");
        for (Document index : coll.listIndexes()) {
            System.out.println(index.toJson());
        }
        // 인덱스 삭제
        coll = database.getCollection("sampleCollection");
        coll.dropIndex(Indexes.ascending("name"));
        System.out.println("인덱스 삭제 후 목록:");
        for (Document index : coll.listIndexes()) {
            System.out.println(index.toJson());
        }
    }
}

실행 결과

인덱스 목록:
{"v": 2, "key": {"_id": 1}, "name": "_id_", "ns": "myDatabase.sampleCollection"}
{"v": 2, "key": {"age": 1}, "name": "age_1", "ns": "myDatabase.sampleCollection"}
{"v": 2, "key": {"name": 1}, "name": "name_1", "ns": "myDatabase.sampleCollection"}

인덱스 삭제 후 목록:
{"v": 2, "key": {"_id": 1}, "name": "_id_", "ns": "myDatabase.sampleCollection"}
{"v": 2, "key": {"age": 1}, "name": "age_1", "ns": "myDatabase.sampleCollection"}

참고 사항

  • _id 인덱스는 삭제할 수 없습니다. MongoDB가 자동으로 생성하는 기본 인덱스이므로 위 실행 결과에서도 삭제 후에도 계속 남아 있는 것을 확인할 수 있습니다.
  • 컬렉션의 모든 인덱스를 한 번에 삭제하려면 dropIndexes() 메서드를 사용할 수 있습니다.
  • 최신 버전의 MongoDB Java 드라이버에서는 MongoClient 생성자 대신 연결 문자열 방식(MongoClients.create("mongodb://localhost:27017"))을 권장합니다.