Docs Menu
Docs Home
/ / /
Scala
/

데이터베이스 및 컬렉션

이 페이지의 내용

  • 전제 조건
  • MongoDB 배포에 연결하기
  • 데이터베이스에 액세스
  • 컬렉션에 액세스
  • 컬렉션 생성
  • 컬렉션 목록 가져오기
  • 제거 collection
  • 불변성
  • CodecRegistry

MongoDB는 데이터를 계층적 구조로 구성합니다. MongoDB 배포에는 하나 이상의 데이터베이스가 포함되며, 각 데이터베이스에는 하나 이상의 컬렉션이 포함됩니다. 각 컬렉션에서 MongoDB는 필드-값 쌍을 포함하는 문서로 데이터를 저장합니다.

이 가이드의 코드 예제를 실행하려면 프로그램에 다음 가져오기 문을 포함해야 합니다.

import org.mongodb.scala._
import org.mongodb.scala.model.Filters._

참고

이 가이드 에서는 퀵 스타트 프라이머에서 다루는 Observable 암시를 사용합니다.

먼저 실행 중인 MongoDB deployment에 연결합니다.

다음 코드는 포트 27017localhost 에서 실행되는 독립형 MongoDB 배포서버에 연결합니다.

val mongoClient = MongoClient()

MongoDB deployment에 연결하는 방법에 대해 자세히 알아보려면 MongoDB에 연결 튜토리얼을 참조하세요.

MongoClient 인스턴스가 MongoDB 배포에 연결되면 `getDatabase() 메서드를 사용하여 데이터베이스에 액세스합니다.

데이터베이스 이름을 getDatabase() 메서드에 매개 변수로 전달합니다. 데이터베이스가 존재하지 않는 경우, 데이터베이스에 데이터를 삽입할 때 MongoDB가 데이터베이스를 생성합니다.

다음 예제에서는 test 데이터베이스에 액세스합니다.

val database: MongoDatabase = mongoClient.getDatabase("test")

참고

MongoDatabase 인스턴스는 변경되지 않습니다. 자세히 알아보려면 이 가이드의 불변성 섹션을 참조하세요.

MongoDatabase 인스턴스를 만든 후 getCollection() 메서드를 사용하여 해당 데이터베이스 내에서 컬렉션에 액세스합니다.

컬렉션 이름을 getCollection() 메서드에 매개변수로 전달합니다.

다음 코드는 이전 섹션에서 만든 database 인스턴스를 사용하여 myTestCollection 컬렉션에 액세스합니다.

val coll: MongoCollection[Document] = database.getCollection("myTestCollection")

참고

MongoCollection 인스턴스는 변경되지 않습니다. 자세한 내용은 이 가이드의 불변성 섹션을 참조하세요.

해당 이름의 컬렉션이 존재하지 않는 경우 해당 컬렉션에 데이터를 처음 삽입할 때 MongoDB가 컬렉션을 생성합니다.

최대 크기를 설정하거나 문서 유효성 검사 규칙을 만드는 등 다양한 옵션을 사용하여 컬렉션을 직접 만들 수도 있습니다.

드라이버는 컬렉션을 직접 만들 수 있는 createCollection() 메서드를 제공합니다. 컬렉션을 만들 때 CreateCollectionOptions 클래스를 사용하여 최대 크기 또는 문서 유효성 검사 규칙과 같은 다양한 컬렉션 옵션을 지정할 수 있습니다.

옵션을 지정하지 않는 경우, 데이터를 처음 삽입할 때 MongoDB가 자동으로 새 컬렉션을 생성하므로 컬렉션을 직접 만들 필요가 없습니다.

다음 작업은 1 메가바이트로 제한된 고정 사이즈 컬렉션을 생성합니다.

database.createCollection("cappedCollection", CreateCollectionOptions().capped(true).sizeInBytes(0x100000))
.printResults()

고정 사이즈 컬렉션 에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 고정 사이즈 컬렉션을 참조하세요.

MongoDB를 사용하면 업데이트 및 삽입 중에 문서의 유효성을 검사할 수 있습니다. 유효성 검사 규칙은 유효성 검사 규칙 또는 표현식을 지정하는 필터 문서를 사용하는 ValidationOptions 클래스를 사용하여 컬렉션 수준에서 지정됩니다.

다음 예에서는 스키마 유효성 검사를 사용하여 컬렉션을 만듭니다.

ValidationOptions collOptions = ValidationOptions().validator(
Filters.or(Filters.exists("email"), Filters.exists("phone")))
database.createCollection("contacts", CreateCollectionOptions().validationOptions(collOptions))
.printResults()

문서 유효성 검사에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 스키마 유효성 검사 를 참조하세요.

MongoDatabase.listCollectionNames() 메서드를 사용하여 데이터베이스의 컬렉션 목록을 가져올 수 있습니다.

database.listCollectionNames().printResults()

MongoCollection.drop() 메서드를 사용하여 컬렉션을 삭제하고 컬렉션의 모든 데이터를 삭제할 수 있습니다.

val collection: MongoCollection[Document] = database.getCollection("contacts")
collection.drop().printResults()

MongoDatabase MongoCollection 인스턴스는 변경할 수 없습니다. 읽기 고려, 읽기 설정쓰기 고려 와 같이 서로 다른 속성을 가진 기존 인스턴스에서 새 인스턴스를 생성하기 위해 MongoDatabaseMongoCollection 클래스는 다음 메서드를 제공합니다.

  • MongoDatabase.withReadConcern()

  • MongoDatabase.withReadPreference()

  • MongoDatabase.withWriteConcern()

  • MongoCollection.withReadConcern()

  • MongoCollection.withReadPreference()

  • MongoCollection.withWriteConcern()

자세히 알아보려면 읽기 작업쓰기 작업 튜토리얼을 참조하세요.

getCollection() 메서드의 오버로드를 사용하면 BSON 문서를 나타내는 다른 클래스를 지정할 수 있습니다. 예를 들어, CRUD 작업을 수행할 때 문서를 모델링하기 위해 엄격하고 형식이 안전한 BsonDocument 클래스를 사용할 수 있습니다.

import org.mongodb.scala.bson._
val collection: MongoCollection[BsonDocument] = database.getCollection[BsonDocument]("mycoll")
// insert a document
val document = BsonDocument("{x: 1}")
collection.insertOne(document).printResults()
document.append("x", BsonInt32(2)).append("y", BsonInt32(3))
// replace a document
collection.replaceOne(Filters.equal("_id", document.get("_id")), document)
.printResults()
// find documents
collection.find().printResults()

모든 클래스가 이러한 방식으로 사용하려면 두 가지 요구 사항을 충족해야 합니다.

  • Codec 클래스의 인스턴스는 MongoCollectionCodecRegistry 에 등록되어야 합니다.

  • Codec 인스턴스는 Int32 와 같은 단일 BSON 값뿐만 아니라 전체 BSON 문서를 인코딩 및 디코딩하는 인스턴스여야 합니다.

기본적으로 MongoCollection 은(는) 네 가지 클래스에 대한 Codec 인스턴스로 구성됩니다.

  • Document (스칼라 BsonDocument 래퍼)

  • BsonDocument

  • Document (Java 드라이버의 느슨한 유형의 Document 클래스)

  • BasicDBObject

애플리케이션은 CodecRegistry 을(를) 사용자 지정하여 다른 클래스에 대한 Codec 구현을 자유롭게 등록할 수 있습니다. 새 CodecRegistry 인스턴스는 다음 수준에서 구성할 수 있습니다.

  • MongoClientSettings MongoClient 에서

  • withCodecRegistry 메서드 내의 MongoDatabase 에서

  • withCodecRegistry 메서드 내의 MongoCollection 에서

UUID 클래스의 인스턴스를 인코딩 및 디코딩하는 경우를 생각해 보세요. 드라이버는 기본적으로 다른 MongoDB 드라이버와 호환되지 않는 바이트 순서를 사용하여 UUID 인스턴스를 인코딩하며, 기본값을 변경하는 것은 위험할 수 있습니다.

여러 드라이버에 대한 상호 운용성이 필요한 새 애플리케이션은 해당 기본값을 변경할 수 있으며, 다음을 지정하여 이를 수행할 수 있습니다. CodecRegistry

// replaces the default UuidCodec with one that uses the new standard UUID representation
import org.bson.UuidRepresentation
import org.bson.codecs.UuidCodec
import org.bson.codecs.configuration.CodecRegistries
val codecRegistry = CodecRegistries.fromRegistries(
CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)),
MongoClient.DEFAULT_CODEC_REGISTRY)
// globally
val settings = MongoClientSettings.builder()
.codecRegistry(codecRegistry).build()
val client = MongoClient(settings)
// or at the database level
val database = client.getDatabase("mydb")
.withCodecRegistry(codecRegistry)
// or at the collection level
val collection = database.getCollection("mycoll")
.withCodecRegistry(codecRegistry)

돌아가기

압축