데이터베이스 및 컬렉션
개요
이 가이드 에서는 스칼라 운전자 사용하여 MongoDB 데이터베이스 및 컬렉션과 상호 작용 방법을 학습 수 있습니다.
MongoDB는 데이터를 다음 수준의 계층 구조로 구성합니다.
데이터베이스: 컬렉션을 저장 하는 MongoDB deployment 의 최상위 데이터 구조입니다.
컬렉션: MongoDB 문서 그룹입니다. 관계형 데이터베이스의 테이블과 유사합니다.
문서: string, 숫자, 날짜 및 기타 내장된 문서와 같은 리터럴 데이터를 저장 하는 단위입니다. 문서 필드 유형 및 구조에 대한 자세한 내용은 MongoDB Server 매뉴얼의 문서 가이드 를 참조하세요.
데이터베이스에 액세스
MongoClient
인스턴스 에서 getDatabase()
메서드를 호출하여 데이터베이스 에 액세스합니다.
다음 예제에서는 "test_database"
데이터베이스에 액세스합니다.
val database = mongoClient.getDatabase("test_database")
컬렉션에 액세스
MongoDatabase
인스턴스 에서 getCollection()
메서드를 호출하여 컬렉션 에 액세스합니다.
다음 예시 에서는 "test_collection"
이라는 컬렉션 에 액세스합니다.
val collection = database.getCollection("test_collection")
팁
제공된 컬렉션 이름이 데이터베이스에 아직 존재하지 않는 경우, MongoDB는 데이터를 처음 삽입할 때 컬렉션을 암시적으로 생성합니다.
컬렉션 생성
데이터베이스 에 컬렉션 명시적으로 만들려면 MongoDatabase
인스턴스 에서 createCollection()
메서드를 사용합니다.
다음 예에서는 "example_collection"
이라는 이름의 collection을 만듭니다.
val createObservable = database.createCollection("example_collection") Await.result(createObservable.toFuture(), Duration(10, TimeUnit.SECONDS))
인스턴스 를 메서드에 전달하여 최대 크기 및 문서 유효성 검사 규칙과 같은 컬렉션 옵션을 지정할 CreateCollectionOptions
수 createCollection()
있습니다. 선택적 매개변수의 전체 목록은 MongoDB Server 매뉴얼의 create 명령 문서를 참조하세요.
컬렉션 목록 가져오기
MongoDatabase
인스턴스 의 listCollections()
메서드를 호출하여 데이터베이스 의 컬렉션 목록을 쿼리 할 수 있습니다.
다음 예시 데이터베이스 의 모든 컬렉션을 나열합니다.
val results = Await.result(database.listCollections().toFuture(), Duration(10, TimeUnit.SECONDS)) results.foreach(println)
Iterable((name,BsonString{value='test_collection'}), (type,BsonString{value='collection'}), ... ) Iterable((name,BsonString{value='example_collection'}), (type,BsonString{value='collection'}), ... )
데이터베이스에서 컬렉션 이름만 쿼리하려면 다음과 같이 listCollectionNames()
메서드를 호출합니다.
val results = Await.result(database.listCollectionNames().toFuture(), Duration(10, TimeUnit.SECONDS)) results.foreach(println)
test_collection example_collection
팁
인스턴스 반복에 대한 자세한 Future
내용은 관찰 가능에서 데이터 액세스 가이드 에서미래를 사용하여 모든 결과 검색하기를 참조하세요.
컬렉션 삭제
MongoCollection
인스턴스 에서 drop()
메서드를 호출하여 컬렉션 삭제 수 있습니다.
다음 예시에서는 "test_collection"
컬렉션을 삭제합니다.
val deleteObservable = database.getCollection("test_collection").drop() Await.result(deleteObservable.toFuture(), Duration(10, TimeUnit.SECONDS))
경고
컬렉션을 제거하면 컬렉션의 모든 데이터가 삭제됨
데이터베이스에서 컬렉션을 삭제하면 해당 컬렉션 내의 모든 문서와 모든 인덱스가 영구적으로 삭제됩니다.
컬렉션의 데이터가 더 이상 필요하지 않은 경우에만 컬렉션을 삭제하세요.
읽기 및 쓰기 작업 구성
읽기 설정( read preference)을 설정하여 드라이버가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 및 쓰기 고려를 설정하여 드라이버가 복제본 세트에 대한 읽기 및 쓰기 작업의 승인을 기다리는 방법에 대한 옵션을 제어할 수도 있습니다.
기본값 으로 데이터베이스는 MongoClient
인스턴스 에서 이러한 설정을 상속하고 컬렉션은 데이터베이스 에서 이러한 설정을 상속합니다. 그러나 withReadPreference()
메서드를 사용하여 데이터베이스 에서 이러한 설정을 변경할 수 있습니다.
다음 예시 데이터베이스 의 읽기 설정 (read preference) secondary
로 지정하면서 데이터베이스 에 액세스합니다.
val databaseWithReadPrefs = mongoClient.getDatabase("test_database").withReadPreference(ReadPreference.secondary())
withReadPreference()
메서드를 사용하여 컬렉션의 읽기 및 쓰기 (write) 설정을 변경할 수도 있습니다. 다음 예시 컬렉션 의 읽기 설정 (read preference) secondary
로 지정하면서 컬렉션 액세스 방법을 보여 줍니다.
val collectionWithReadPrefs = database.getCollection("test_collection").withReadPreference(ReadPreference.secondary())
팁
To see the types of available read preferences, see the API documentation.
읽기 및 쓰기 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.
태그 세트
MongoDB Server 에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그를 적용 할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.
기본값 으로 스칼라 운전자 읽을 멤버를 선택할 때 태그를 무시합니다. 스칼라 운전자 특정 태그를 선호하도록 지시하려면 TagSet
인스턴스 ReadPreference
생성자에 전달한 다음, ReadPreference
인스턴스 MongoClient
인스턴스화하는 데 사용하는 MongoClientSettings
에 전달합니다.
다음 코드 예시 에서 ReadPreference
생성자에 전달된 태그 세트 스칼라 운전자 뉴욕 데이터 센터 ('dc': 'ny'
)에서 읽기를 선호하고 샌프란시스코 데이터 센터 ('dc': 'sf'
)로 대체하도록 지시합니다.
val tag1 = new Tag("dc", "ny") val tag2 = new Tag("dc", "sf") val tagSet = new TagSet(List(tag1, tag2).asJava) val connectionString = ConnectionString("<connection string URI>") val readPreference = ReadPreference.primaryPreferred(tagSet) val mongoClientSettings = MongoClientSettings.builder() .applyConnectionString(connectionString) .readPreference(readPreference) .build() val clientWithTags = MongoClient(mongoClientSettings)
LocalThreshold
여러 복제본 세트 멤버가 지정한 읽기 설정 (read preference) 및 태그를 지정하다 세트와 일치하는 경우 스칼라 운전자 핑 시간에 따라 선택된 가장 가까운 복제본 세트 멤버에서 읽습니다.
기본값 으로 운전자 핑 시간이 가장 가까운 멤버의 15 밀리초 이내인 멤버만 쿼리에 사용합니다. 지연 시간이 더 긴 멤버 간에 읽기를 분산하려면 MongoClientSettings.Builder
클래스의 applyToClusterSettings()
메서드에서 제공하는 ClusterSettings.Builder
차단 내에서 localThreshold()
메서드를 사용합니다. 또는 연결 문자열 URI에 localThresholdMS
매개 변수를 포함합니다.
다음 예시 에서는 localhost:27017
에서 실행 MongoDB deployment 서버에 연결하고 로컬 임계값을 35 밀리초로 지정합니다.
val connectionString = ConnectionString("mongodb://localhost:27017") val mongoClientSettings = MongoClientSettings.builder() .applyConnectionString(connectionString) .applyToClusterSettings(builder => builder.localThreshold(35, TimeUnit.MILLISECONDS)) .build() val client = MongoClient(mongoClientSettings)
앞의 예시 에서 스칼라 운전자 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버 간에 읽기를 분산합니다.
API 문서
이 가이드에서 설명하는 유형 또는 메서드에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.