ドキュメントの挿入
Overview
このガイドでは、 Java Reactive Streams ドライバーを使用して挿入操作を実行し、 MongoDBコレクションにドキュメントを追加する方法を学習できます。
挿入操作は 、1 つ以上の ドキュメント をMongoDBコレクションに挿入します。 挿入操作は、 insertOne()
またはinsertMany()
メソッドを使用して実行できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants.restaurants
コレクションを使用します。
無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、「 を使い始める 」チュートリアルを参照してください。
重要
プロジェクトリ アクター ライブラリ
このガイドでは、プロジェクト Reactive ライブラリを使用して、Publisher
Java Reactive Streams ドライバー メソッドによって返された インスタンスを消費します。プロジェクト Reactor ライブラリとその使用方法の詳細については、React ドキュメントの「 使用開始 」 を参照してください。このガイドでは Project React ライブラリ メソッドをどのように使用しているかについて詳しくは、「 MongoDBへのデータの書込み 」ガイドを参照してください。
_id
フィールド
MongoDB コレクションでは、各ドキュメントに一意のフィールド値を持つ_id
フィールドが含まれている必要があります。
MongoDB では、このフィールドは次の 2 つの方法で管理できます。
このフィールドは各ドキュメントに自分で設定することができ、各
_id
フィールド値が一意であることを確認します。ドライバーを使用して、各ドキュメント
_id
に対して一意のObjectId
値を自動的に生成できます。 ドキュメントの_id
値を手動で設定しない場合、ドライバーは フィールドにObjectId
を入力します。
一意性を保証できない限り、ドライバーに_id
値を自動的に生成させることをお勧めします。
注意
重複した_id
値は一意のインデックス制約に違反するため、ドライバーはinsertOne()
WriteError
を、またはinsertMany()
BulkWriteError
を返します。
_id
フィールドの詳細については、 マニュアルの 「 一意なインデックス 」MongoDB Server のガイドを参照してください。
ドキュメント構造とルールの詳細については、MongoDB Server マニュアルのドキュメントガイド を参照してください。
1つのドキュメントの挿入
MongoDBコレクションに単一のドキュメントを追加するには 、 insertOne()
メソッドを呼び出して、追加するドキュメントを渡します。 次に、 insertOne()
の結果をMono
から静的Mono.from()
メソッドに渡します。 Mono
は、プロジェクト Reactor ライブラリのクラスです。 Java Reactive Streams では、ドライバー メソッドはコールドPublisher
インスタンスを返します。つまり、返されたPublisher
をサブスクライブしないと、対応する操作は実行されません。 このガイドでは、Project Reactor ライブラリを使用してそれらを消費します。 Mono
の詳細については、 MongoDB を参照してください プロジェクト React のドキュメントを参照してください。
次の例では、 insertOne()
メソッドを使用して、 name
の値が"Mongo's
Burgers"
であるドキュメントをrestaurants
コレクションに挿入します。
Document document = new Document("name", "Mongo's Burgers"); Publisher<InsertOneResult> insertPublisher = restaurants.insertOne(document); Mono.from(insertPublisher).block();
複数のドキュメントの挿入
MongoDBコレクションに複数のドキュメントを追加するには 、 insertMany()
メソッドを呼び出して、追加するドキュメントのリストを渡します。 次に、 insertMany()
の結果をMono
から静的Mono.from()
メソッドに渡します。 Mono
は、プロジェクト Reactor ライブラリのクラスです。 Java Reactive Streams では、ドライバー メソッドはコールドPublisher
インスタンスを返します。つまり、返されたPublisher
をサブスクライブしないと、対応する操作は実行されません。 このガイドでは、Project Reactor ライブラリを使用してそれらを消費します。 Mono
の詳細については、 MongoDB を参照してください プロジェクト React のドキュメントを参照してください。
次の例では、 insertMany()
メソッドを使用してドキュメントのリストをrestaurants
コレクションに挿入します。
Document doc1 = new Document("name", "Mongo's Pizza"); Document doc2 = new Document("name", "Mongo's Coffee"); List<Document> documents = Arrays.asList(doc1, doc2); Publisher<InsertManyResult> insertPublisher = restaurants.insertMany(documents); Mono.from(insertPublisher).block();
挿入動作の変更
InsertOneOptions
クラスには、 insertOne()
メソッドの動作を変更するメソッドが含まれています。 InsertOneOptions
クラスを使用するには、クラスの新しいインスタンスを作成し、そのメソッドの 1 つ以上を呼び出して 挿入操作を変更します。 これらのメソッド呼び出しを連鎖させることができます。 挿入操作の動作を変更するには、クラスインスタンスと連鎖メソッド呼び出しをinsertOne()
メソッドの 2 番目の引数として渡します。
InsertManyOptions
クラスを使用して、 insertMany()
メソッドも同様に変更できます。
insertOne()
メソッドを変更するには、 InsertOneOptions
クラスの次のメソッドを使用します。 すべてのメソッドは任意です。
方式 | 説明 |
---|---|
bypassDocumentValidation (Boolean bypassDocumentValidation) | If set to True , allows the write to opt out of
document-level validation.Defaults to False . |
toString() | If used, returns a string representation of the object. |
comment(BsonValue comment) | A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
InsertManyOptions
クラスには、前のメソッドと次のordered()
メソッドが含まれています。
方式 | 説明 |
---|---|
ordered(Boolean ordered) | If set to True , the driver sends documents to the
server in the order provided. If an error occurs, the driver
and server cancel all remaining insert operations.Defaults to True . |
例
次のコードでは、 insertMany()
メソッドを使用して新しいドキュメントをrestaurants
コレクションに挿入します。 また、ドキュメントレベルの検証をバイパスするには、 bypassDocumentValidation(true)
オプションを設定します。
Document doc1 = new Document("name", "Mongo's Burgers"); Document doc2 = new Document("name", "Mongo's Pizza"); Document doc3 = new Document("name", "Mongo's Coffee"); List<Document> documents = Arrays.asList(doc1, doc2, doc3); Publisher<InsertManyResult> insertPublisher = restaurants.insertMany(documents, new InsertManyOptions().bypassDocumentValidation(true)); Mono.from(insertPublisher).block();
詳細情報
Java Reactive Streams ドライバーを使用してドキュメントを挿入する実行可能なコード例については、 「 MongoDBへのデータの書込み」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。