빠른 시작(사례 클래스 예제)
이 페이지의 내용
개요
이 가이드 는 빠른 시작 가이드 와 유사하지만 일반적인 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으로 변환하거나 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
, Projections
및 Updates
헬퍼를 활성화 간단하고 간결한 방법으로 쿼리를 작성할 수 있습니다.
일치하는 사람 인스턴스 찾기
다음 필터하다 는 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: ")