Docs Menu
Docs Home
/ / /
Scala
/

빠른 시작(사례 클래스 예제)

이 페이지의 내용

  • 개요
  • 케이스 클래스 구성
  • 사람 삽입
  • 여러 사람 인스턴스 삽입
  • 컬렉션 쿼리
  • 일치하는 첫 번째 사람 찾기
  • 모든 문서 반환
  • 쿼리 필터를 사용하여 사람 검색
  • 일치하는 사람 인스턴스 찾기
  • 문서 업데이트
  • 문서 삭제

이 가이드는 빠른 시작 가이드 와 유사하지만 일반적인 Document 클래스 대신 사례 클래스를 사용하여 문서를 모델링합니다.

이 가이드의 코드 예제는 QuickTourCaseClass.scala 파일을 드라이버 소스 코드 Github 리포지토리에 저장합니다.

중요

MongoCollection 인스턴스에서 케이스 클래스 지원을 구성하기 위해 매크로를 사용하는 방법에 대한 자세한 내용은 BSON 매크로 설명서를 참조하세요.

먼저 컬렉션의 문서를 나타내는 데 사용할 사례 클래스를 만듭니다. 다음 코드는 Person 케이스 클래스와 컴패니언 객체를 생성합니다.

import org.mongodb.scala.bson.ObjectId
object Person {
def apply(firstName: String, lastName: String): Person =
Person(new ObjectId(), firstName, lastName)
}
case class Person(_id: ObjectId, firstName: String, lastName: String)

참고

컴패니언 객체에서 apply() 메서드는 값을 포함하지 않는 새 인스턴스를 만들 때 _id 값을 자동으로 할당할 수 있습니다. MongoDB에서 _id 필드는 문서의 프라이머리 키를 나타내므로 케이스 클래스에 _id 필드가 있으면 프라이머리 키에 대한 액세스를 허용할 수 있습니다.

컬렉션에 Person 을(를) 사용하는 경우 컬렉션을 BSON과 변환할 수 있는 Codec 이(가) 있어야 합니다. org.mongodb.scala.bson.codecs.Macros 컴패니언 객체는 컴파일 타임에 케이스 클래스에 대한 코덱을 자동으로 생성할 수 있는 매크로를 제공합니다. 다음 예시에서는 Person 케이스 클래스에 대한 코덱을 포함하는 새 CodecRegistry 를 만듭니다.

import org.mongodb.scala.bson.codecs.Macros._
import org.mongodb.scala.MongoClient.DEFAULT_CODEC_REGISTRY
import org.bson.codecs.configuration.CodecRegistries.{fromRegistries, fromProviders}
val codecRegistry = fromRegistries(fromProviders(classOf[Person]), DEFAULT_CODEC_REGISTRY )

CodecRegistry 이(가) 구성되면 다음 단계는 MongoCollection[Person] 을(를) 만드는 것입니다. 다음 예제에서는 mydb 데이터베이스의 test 컬렉션을 사용합니다.

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("mydb").withCodecRegistry(codecRegistry)
val collection: MongoCollection[Person] = database.getCollection("test")

참고

데이터베이스 수준 또는 컬렉션 수준에서 MongoClient 를 만들 때 CodecRegistry 을 설정할 수 있습니다. API는 유연하므로 필요에 따라 다양한 CodecRegistry 인스턴스를 허용할 수 있습니다.

올바르게 구성된 MongoCollection 을 사용하면 컬렉션에 Person 인스턴스를 삽입하는 것이 간단합니다.

val person: Person = Person("Ada", "Lovelace")
collection.insertOne(person).results()

여러 Person 인스턴스를 삽입하려면 insertMany() 메서드를 사용합니다. 다음 예제에서는 printResults() 암시적 및 및 을(를) 사용하여 관찰자가 완료될 때까지 차단한 다음 각 결과를 인쇄합니다.

val people: Seq[Person] = Seq(
Person("Charles", "Babbage"),
Person("George", "Boole"),
Person("Gertrude", "Blanch"),
Person("Grace", "Hopper"),
Person("Ida", "Rhodes"),
Person("Jean", "Bartik"),
Person("John", "Backus"),
Person("Lucy", "Sanders"),
Person("Tim", "Berners Lee"),
Person("Zaphod", "Beeblebrox")
)
collection.insertMany(people).printResults()

이 코드는 다음 메시지를 출력합니다.

The operation completed successfully

find() 메서드를 사용하여 컬렉션을 쿼리합니다.

컬렉션 쿼리는 빠른 시작에서 사용된 것과 동일한 API를 사용합니다.

collection.find().first().printHeadResult()

이 예에서는 컬렉션의 첫 번째 Person 를 인쇄합니다.

Person(58dd0a68218de22333435fa4, Ada, Lovelace)

컬렉션의 모든 문서를 검색하려면 find() 메서드를 사용합니다. find() 메서드는 찾기 작업을 연결하거나 제어하기 위한 유창한 인터페이스를 제공하는 FindObservable 인스턴스를 반환합니다. 다음 용도는 컬렉션의 모든 문서를 Person 인스턴스로 인쇄합니다.

collection.find().printResults()

컬렉션에 있는 문서의 하위 집합을 반환하려면 find() 메서드에 필터를 전달합니다. 예를 들어 다음 예제에서는 이름이 "Ida" 인 첫 번째 Person 을 반환합니다.

import org.mongodb.scala.model.Filters._
collection.find(equal("firstName", "Ida")).first().printHeadResult()

이 예제에서는 다음과 같은 결과가 출력됩니다.

Person(58dd0a68218de22333435fa4, Ida, Rhodes)

Filters, Sorts, ProjectionsUpdates 헬퍼를 사용하면 간단하고 간결한 방법으로 쿼리를 작성할 수 있습니다.

다음 필터는 firstName"G" 로 시작하는 모든 Person 인스턴스를 lastName 기준으로 정렬합니다.

collection.find(regex("firstName", "^G")).sort(ascending("lastName")).printResults()

이 예시에서는 "Gertrude", "George""Grace" 에 대한 Person 인스턴스를 출력합니다.

MongoDB에서 지원하는 업데이트 연산자 는 여러 가지가 있습니다. Updates 헬퍼를 사용하여 컬렉션의 문서를 업데이트할 수 있습니다.

다음 업데이트는 "Tim Berners-Lee" 에 대한 하이픈 넣기를 수정합니다.

collection.updateOne(equal("lastName", "Berners Lee"), set("lastName", "Berners-Lee"))
.printHeadResult("Update Result: ")

업데이트 메서드는 업데이트로 수정된 문서 수를 포함하여 작업에 대한 정보를 제공하는 UpdateResult 를 반환합니다.

문서를 하나만 삭제하거나 필터와 일치하는 문서가 없는 경우 문서를 삭제하지 않으려면 deleteOne() 메서드를 사용합니다.

collection.deleteOne(equal("firstName", "Zaphod")).printHeadResult("Delete Result: ")

돌아가기

빠른 시작