AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

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

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 配置に接続します。

次のコードは、ポート27017のlocalhostで実行されているスタンドアロンの 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>());

次の例に示すように、MongoDatabase.drop() メソッドを使用してデータベースを削除し、そのコレクションすべてを削除できます。

MongoDatabase database = mongoClient.getDatabase("test");database.drop().subscribe(new OperationSubscriber<Void>());

警告

データベースを削除すると、データベース内のすべてのデータが削除されます

データベースを削除すると、そのデータベース内のすべてのコレクション、ドキュメント、およびインデックスが 永続的に 削除されます。

データベース内のデータが不要になった場合にのみ、データベースを削除します。

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

  • MongoDatabase.withReadConcern()

  • MongoDatabase.withReadPreference()

  • MongoDatabase.withWriteConcern()

  • MongoCollection.withReadConcern()

  • MongoCollection.withReadPreference()

  • MongoCollection.withWriteConcern()

詳細については、「クエリ ドキュメント」および「ドキュメントの挿入」のチュートリアルを参照してください。

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

// pass BsonDocument.class as the second argumentMongoCollection<BsonDocument> collection = database .getCollection("mycoll", BsonDocument.class); // insert a documentBsonDocument 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 documentcollection.replaceOne(Filters.eq("_id", document.get("_id")), document) .subscribe(new PrintSubscriber<UpdateResult>("Update Result: %s")); // find documentscollection.find().subscribe(new PrintDocumentSubscriber());

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

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

  • 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 representationCodecRegistry codecRegistry = CodecRegistries.fromRegistries( CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)), MongoClientSettings.getDefaultCodecRegistry()); // globallyMongoClientSettings settings = MongoClientSettings.builder() .codecRegistry(codecRegistry).build();MongoClient client = MongoClients.create(settings); // or per databaseMongoDatabase database = client.getDatabase("mydb") .withCodecRegistry(codecRegistry); // or per collectionMongoCollection<Document> collection = database.getCollection("mycoll") .withCodecRegistry(codecRegistry);