Docs Menu
Docs Home
/ / /
Scala
/

クイック スタート(ケース クラスの例)

項目一覧

  • Overview
  • ケース クラスの構成
  • 人の挿入
  • 複数のユーザー インスタンスの挿入
  • コレクションのクエリ
  • 最初に一致する人の検索
  • すべてのドキュメントを返す
  • クエリフィルターを使用して人を検索する
  • 一致するユーザー インスタンスの検索
  • Update Documents
  • Delete Documents

このガイドはクイック スタート ガイドと似ていますが、ドキュメントをモデル化するには、一般的な 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

FiltersSortsProjections 、および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が返されます。

最大で 1 つのドキュメントを削除するか、フィルターに一致するドキュメントがない場合は削除しない場合は、 deleteOne()メソッドを使用します。

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

戻る

クイック スタート