クイック スタート(ケース クラスの例)
項目一覧
Overview
このガイドはクイック スタート ガイドと似ていますが、ドキュメントをモデル化するには、一般的な Document
クラスではなく、ケース クラスを使用します。
このガイドのコード例は、 クイックツールケースクラス.scala から取得されています ドライバー ソースGithub コード リポジトリ内のファイル。
重要
MongoCollection
インスタンスで大文字と小文字のサポートを構成するためのマイクロを使用する方法については、 BSON Macrosのドキュメントを参照してください。
まず、コレクション内のドキュメントを表すために使用するケース クラスを作成します。 次のコードは、 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")
注意
CodecRegistry
は、データベース レベルまたはコレクション レベルでMongoClient
を作成するときに設定できます。 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)
Tip
Filters
、 Sorts
、 Projections
、およびUpdates
ヘルパーを使用して、簡単かつ簡潔な方法でクエリを構築できます。
一致するユーザー インスタンスの検索
次のフィルタは、 firstName
が"G"
で始まるすべてのPerson
インスタンスを、 lastName
でソートして検索します。
collection.find(regex("firstName", "^G")).sort(ascending("lastName")).printResults()
この例では、 "Gertrude"
、 "George"
、 "Grace"
のPerson
インスタンスが出力されます。
Update Documents
MongoDB でサポートされている更新演算子は多数あります。 コレクション内のドキュメントを更新するには、 Updates
ヘルパーを使用します。
次のアップデートでは、 "Tim Berners-Lee"
のハイフンを修正します。
collection.updateOne(equal("lastName", "Berners Lee"), set("lastName", "Berners-Lee")) .printHeadResult("Update Result: ")
アップデート メソッドでは、アップデートによって変更されたドキュメント数など、操作に関する情報を提供するUpdateResult
が返されます。
Delete Documents
最大で 1 つのドキュメントを削除するか、フィルターに一致するドキュメントがない場合は削除しない場合は、 deleteOne()
メソッドを使用します。
collection.deleteOne(equal("firstName", "Zaphod")).printHeadResult("Delete Result: ")