MongoDB는 데이터를 계층적 구조로 구성합니다. MongoDB 배포에는 하나 이상의 데이터베이스가 포함되며, 각 데이터베이스에는 하나 이상의 컬렉션이 포함됩니다. 각 컬렉션에서 MongoDB는 필드-값 쌍을 포함하는 문서로 데이터를 저장합니다.
전제 조건
이 가이드의 코드 예제를 실행하려면 프로그램에 다음 가져오기 문을 포함해야 합니다.
import org.mongodb.scala._ import org.mongodb.scala.model.Filters._ 
참고
이 가이드 에서는 퀵 스타트 프라이머에서 다루는 Observable 암시를 사용합니다.
MongoDB 배포에 연결하기
먼저 실행 중인 MongoDB deployment에 연결합니다.
다음 코드는 포트 27017 의 localhost 에서 실행되는 독립형 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() 
제거 collection
MongoCollection.drop() 메서드를 사용하여 컬렉션을 삭제하고 컬렉션의 모든 데이터를 삭제할 수 있습니다.
val collection: MongoCollection[Document] = database.getCollection("contacts") collection.drop().printResults() 
불변성
MongoDatabase MongoCollection 인스턴스는 변경할 수 없습니다. 읽기 고려, 읽기 설정 및 쓰기 고려 와 같이 서로 다른 속성을 가진 기존 인스턴스에서 새 인스턴스를 생성하기 위해 MongoDatabase 및 MongoCollection 클래스는 다음 메서드를 제공합니다.
MongoDatabase.withReadConcern()MongoDatabase.withReadPreference()MongoDatabase.withWriteConcern()MongoCollection.withReadConcern()MongoCollection.withReadPreference()MongoCollection.withWriteConcern()
CodecRegistry
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클래스의 인스턴스는MongoCollection의CodecRegistry에 등록되어야 합니다.Codec인스턴스는Int32와 같은 단일 BSON 값뿐만 아니라 전체 BSON 문서를 인코딩 및 디코딩하는 인스턴스여야 합니다.
기본적으로 MongoCollection 은(는) 네 가지 클래스에 대한 Codec 인스턴스로 구성됩니다.
Document(스칼라BsonDocument래퍼)BsonDocumentDocument(Java 드라이버의 느슨한 유형의Document클래스)BasicDBObject
애플리케이션은 CodecRegistry 을(를) 사용자 지정하여 다른 클래스에 대한 Codec 구현을 자유롭게 등록할 수 있습니다. 새 CodecRegistry 인스턴스는 다음 수준에서 구성할 수 있습니다.
MongoClientSettingsMongoClient에서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)