Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー

データベースとコレクション

項目一覧

  • 前提条件
  • MongoDB 配置への接続
  • データベースへのアクセス
  • コレクションにアクセスする
  • コレクションを作成する
  • コレクションの一覧を取得する
  • コレクションの削除
  • 不変性
  • CodecRegistry

MongoDB では、データは階層構造で整理されています。 MongoDB 配置には 1 つ以上のデータベースが含まれ、各データベースには 1 つ以上のコレクションが含まれます。 各コレクションでは、MongoDB は、フィールドと値のペアを含むドキュメントとしてデータを保存します。

このガイドのコード例を実行するには、プログラムに次のインポート ステートメントを含める必要があります。

import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoCollection;
import com.mongodb.reactivestreams.client.MongoDatabase;
import static com.mongodb.client.model.Filters.*;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.ValidationOptions;

重要

このガイドでは、カスタム Subscriber実装を使用します。これについては、 カスタム サブスクリプション実装ガイドで説明されています。

まず、実行中の MongoDB 配置に接続します。

次のコードは、ポート27017localhostで実行されているスタンドアロンの MongoDB 配置に接続します。

MongoClient mongoClient = MongoClients.create();

MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。

MongoClientインスタンスがMongoDB 配置に接続されたら、`getDatabase()メソッドを使用してデータベースにアクセスします。

データベースの名前をパラメータとしてgetDatabase()メソッドに渡します。 データベースが存在しない場合は、データベースにデータを挿入すると MongoDB によってデータベースが作成されます。

次の例では、 testデータベースにアクセスします。

MongoDatabase database = mongoClient.getDatabase("test");

注意

MongoDatabase インスタンスは不変です。 詳細については、このガイドの不変性セクションを参照してください。

MongoDatabaseインスタンスを作成したら、 getCollection()メソッドを使用してそのデータベース内からコレクションにアクセスします。

コレクションの名前をパラメータとしてgetCollection()メソッドに渡します。

前のセクションで作成されたdatabaseインスタンスを使用して、次のコードはmyTestCollectionという名前のコレクションにアクセスします。

MongoCollection<Document> coll = database.getCollection("myTestCollection");

注意

MongoCollection インスタンスは不変です。 詳細については、このガイドの「不変の 」セクションを参照してください。

その名前のコレクションが存在しない場合、MongoDB は最初にそのコレクションにデータを挿入する際にコレクションを作成します。

また、最大サイズの設定やドキュメント検証ルールの作成など、さまざまなオプションを使用してコレクションを直接作成することもできます。

ドライバーはコレクションを直接作成するためのcreateCollection()メソッドを提供します。 コレクションを作成する際には、 CreateCollectionOptionsクラスを使用して、最大サイズやドキュメント検証ルールなどのさまざまなコレクション オプションを指定できます。

オプションを指定しない場合、データを初めて挿入するときに MongoDB によって自動的に新しいコレクションが作成されるため、コレクションを直接作成する必要はありません。

次の操作では、 1メガバイトに制限された上限付きコレクションが作成されます。

database.createCollection(
"cappedCollection",
new CreateCollectionOptions().capped(true).sizeInBytes(0x100000)
).subscribe(new OperationSubscriber<Void>());

Capped コレクションの詳細については、サーバー マニュアルの「 Capped コレクション 」を参照してください。

MongoDB では、アップデートや挿入中にドキュメントを検証できます。 検証ルールは、検証ルールまたは式を指定するフィルタードキュメントを取りますValidationOptionsクラスを使用してコレクション レベルで指定されます。

次の例では、スキーマ検証を使用して コレクションを作成しています。

ValidationOptions collOptions = new ValidationOptions().validator(
Filters.or(Filters.exists("email"), Filters.exists("phone")));
database.createCollection(
"contacts",
new CreateCollectionOptions().validationOptions(collOptions)
).subscribe(new OperationSubscriber<Void>());

ドキュメント検証の詳細については、サーバー マニュアルの「スキーマ検証」を参照してください。

データベース内のコレクションのリストは、 MongoDatabase.listCollectionNames()メソッドを使用して取得できます。

database.listCollectionNames().subscribe(new PrintToStringSubscriber<String>());

MongoCollection.drop()メソッドを使用して、コレクションを削除し、コレクション内のすべてのデータを削除できます。

MongoCollection<Document> collection = database.getCollection("contacts");
collection.drop().subscribe(new OperationSubscriber<Void>());

MongoDatabaseMongoCollectionインスタンスは不変です。 既存の インスタンスから、読み取り保証( read concern 、読み込み設定( read preference )、書込み保証( write concern ) など、異なるプロパティを持つ新しい インスタンスを作成するには、MongoDatabase MongoCollectionクラスと クラスは次のメソッドを提供します。

  • MongoDatabase.withReadConcern()

  • MongoDatabase.withReadPreference()

  • MongoDatabase.withWriteConcern()

  • MongoCollection.withReadConcern()

  • MongoCollection.withReadPreference()

  • MongoCollection.withWriteConcern()

詳しくは、「 MongoDB からのデータの読み取り 」および「 MongoDBへのMongoDBの書き込み」チュートリアルを参照してください。

getCollection()メソッドのオーバーロードを使用すると、BSON ドキュメントを表現するための別のクラスを指定できます。 たとえば、CRUD 操作を実行するときにドキュメントをモデル化するために、厳密で型安全性のBsonDocumentクラスを使用することができます。

// pass BsonDocument.class as the second argument
MongoCollection<BsonDocument> collection = database
.getCollection("mycoll", BsonDocument.class);
// insert a document
BsonDocument document = BsonDocument.parse("{x: 1}");
collection.insertOne(document).subscribe(new OperationSubscriber<Void>());
document.append("x", new BsonInt32(2)).append("y", new BsonInt32(3));
// replace a document
collection.replaceOne(Filters.eq("_id", document.get("_id")), document)
.subscribe(new PrintSubscriber<UpdateResult>("Update Result: %s"));
// find documents
collection.find().subscribe(new PrintDocumentSubscriber());

この方法で使用するには、任意のクラスが満たす必要がある 2 つの要件があります。

  • Codec クラスの インスタンスは、 MongoCollectionCodecRegistryに登録されている必要があります。

  • Codec インスタンスは、たとえばInt32のような単一の BSON 値だけでなく、完全な BSON ドキュメントをエンコードおよびデコードするインスタンスである必要があります。

デフォルトでは、 MongoCollectionは 3 つのクラスのCodecインスタンスで構成されています。

  • Document

  • BsonDocument

  • BasicDBObject

アプリケーションはCodecRegistryをカスタマイズすることで、他のクラスのCodec実装を無料で登録できます。 新しいCodecRegistryインスタンスは、次のレベルで構成できます。

  • MongoClientSettings MongoClient

  • withCodecRegistryメソッド内のMongoDatabase

  • withCodecRegistryメソッド内のMongoCollection

UUIDクラスのインスタンスをエンコードおよびデコードする場合を考えてみましょう。 このドライバーはデフォルトで、他の MongoDB ドライバーと互換性のないバイト順を使用してUUIDのインスタンスをエンコードし、デフォルトを変更するとリスクがありません。

複数のドライバー間での相互運用性を必要とする新しいアプリケーションでは、そのデフォルトを変更できる可能性があり、そのためには次を指定します: CodecRegistry

// replaces the default UuidCodec to use the standard UUID representation
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(
CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)
), MongoClientSettings.getDefaultCodecRegistry());
// globally
MongoClientSettings settings = MongoClientSettings.builder()
.codecRegistry(codecRegistry).build();
MongoClient client = MongoClients.create(settings);
// or per database
MongoDatabase database = client.getDatabase("mydb")
.withCodecRegistry(codecRegistry);
// or per collection
MongoCollection<Document> collection = database.getCollection("mycoll")
.withCodecRegistry(codecRegistry);

戻る

Stable API