Docs Menu
Docs Home
/ / /
Scala

데이터베이스 및 컬렉션

이 페이지의 내용

  • 개요
  • 데이터베이스에 액세스
  • 컬렉션에 액세스
  • 컬렉션 생성
  • 컬렉션 목록 가져오기
  • 컬렉션 삭제
  • 읽기 및 쓰기 작업 구성
  • 태그 세트
  • LocalThreshold
  • API 문서

이 가이드 에서는 스칼라 운전자 사용하여 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))

인스턴스 를 메서드에 전달하여 최대 크기 및 문서 유효성 검사 규칙과 같은 컬렉션 옵션을 지정할 CreateCollectionOptionscreateCollection() 있습니다. 선택적 매개변수의 전체 목록은 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())

읽기 및 쓰기 설정에 대해 자세히 알아보려면 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)

여러 복제본 세트 멤버가 지정한 읽기 설정 (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 문서를 참조하세요.

돌아가기

TLS 구성