クイック スタート(ケース クラスの例)
項目一覧
Overview
このガイドはクイック スタート ガイドと似ていますが、ドキュメントをモデル化するには、一般的な Document
クラスではなく、ケース クラスを使用します。
このガイドのコード例は、ドライバーソースコードGitHubリポジトリの QuickTourCateClass.scala ファイルから取得されています。
重要
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: ")