挿入操作
Overview
このガイドでは、MongoDB Kotlin ドライバーを使用してドキュメントを 挿入 する方法を学習できます。
MongoDB を使用して、情報を検索、更新、および削除できます。 これらの操作のいずれかを実行するには、ユーザー プロファイルや注文などの情報が MongoDB に存在する必要があります。 その情報を利用するには、まず挿入操作を実行する必要があります。
挿入操作では、 insertOne()
、 insertMany()
、 bulkWrite()
メソッドを使用して、単一または複数のドキュメントを MongoDB に挿入します。
次のセクションでは、 insertOne()
とinsertMany()
に焦点を当てます。 bulkWrite()
メソッドの使用方法について詳しくは、 一括操作 に関するガイドを参照してください。
次の例では、塗料店にさまざまな色の塗料の在庫があります。 このデータは、次の Kotlin データ クラスでモデル化されます。
data class PaintOrder( val id: ObjectId? = null, val qty: Int, val color: String )
に関するメモ _id
ドキュメントを挿入する際、MongoDB はデフォルトでドキュメントに 1 つの制約を適用します。各ドキュメントには一意の_id
フィールドが含まれている必要があります。
このフィールドを管理するには、次の 2 つの方法があります。
このフィールドは自分で管理し、使用する各値が一意であることを確認できます。
ドライバーが一意の ObjectId 値を自動的に生成できるようにします。
一意性について強力な保証を提供していない限り、ドライバーに_id
値を自動的に生成させることをお勧めします。
注意
重複した_id
値は一意のインデックス制約に違反し、 WriteError
が返されます。
一意のインデックスに関する詳細については、「 一意のインデックス 」に関する手動エントリを参照してください。
単一ドキュメントのインサート
単一のドキュメントを挿入する場合は、 insertOne()
メソッドを使用します。
挿入に成功すると、メソッドは新しいドキュメントの_id
を表すInsertOneResult
インスタンスを返します。
例
次の例では、 insertOne()
メソッドを使用してドキュメントを作成し、挿入します。
val paintOrder = PaintOrder(ObjectId(), 5, "red") val result = collection.insertOne(paintOrder) val insertedId = result.insertedId?.asObjectId()?.value println("Inserted a document with the following id: $insertedId")
Inserted a document with the following id: 60930c39a982931c20ef6cd6
このセクションで述べられたメソッドとクラスの詳細については、次のリソースを参照してください。
insertOne() API ドキュメント
InsertOneResult API ドキュメント
insertOne()に関する手動説明
複数のドキュメントの挿入
複数のドキュメントを挿入する場合は、 insertMany()
メソッドを使用します。 このメソッドは、例外が発生するまで、指定された順序でドキュメントを挿入します。
たとえば、次のドキュメントを挿入するとします。
{ "color": "red", "qty": 5 } { "color": "purple", "qty": 10 } { "color": "yellow", "qty": 3 } { "color": "blue", "qty": 8 }
これらのドキュメントを挿入しようとすると、3 番目のドキュメントでWriteError
が発生し、エラーの前のドキュメントがコレクションに挿入されます。
Tip
エラーが発生する前に、正常に処理されたドキュメントの確認応答を取得するには、try-catch ブロックを使用します。 出力は、MongoDB が処理できるドキュメントで構成されています。
val result = collection.insertMany(paintOrders) try { println("Inserted documents with the following ids: ${result.insertedIds}") } catch(e: MongoBulkWriteException){ val insertedIds = e.writeResult.inserts.map { it.id.asInt32().value } println( "A MongoBulkWriteException occurred, but there are " + "successfully processed documents with the following ids: $insertedIds" ) collection.find().collect { println(it) } }
A MongoBulkWriteException occurred, but there are successfully processed documents with the following ids: [60930c3aa982931c20ef6cd7, 644ad1378ea29443837a14e9, 60930c3aa982931c20ef6cd8]
コレクション内を確認すると、次のドキュメントが表示されます。
{ "color": "red", "qty": 5 } { "color": "purple", "qty": 10 }
挿入に成功すると、メソッドは新しい各ドキュメントの_id
を表すInsertManyResult
インスタンスを返します。
例
次の例では、2 つのドキュメントを作成してList
に追加し、 insertMany()
メソッドを使用してList
を挿入します。
val paintOrders = listOf( PaintOrder(ObjectId(), 5, "red"), PaintOrder(ObjectId(), 10, "purple") ) val result = collection.insertMany(paintOrders) println("Inserted a document with the following ids: ${result.insertedIds.toList()}")
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]
このセクションで述べられたメソッドとクラスの詳細については、次のリソースを参照してください。
insertMany() API ドキュメント
InsertManyResult API ドキュメント
insertMany()に関する手動説明
実行可能な複数ドキュメントの挿入の例
概要
挿入操作を実行するには 3 つの方法がありますが、ここでは 2 つの方法に焦点を当てています。
insertOne()
メソッドは 1 つのドキュメントを挿入します。insertMany()
メソッドは複数のドキュメントを挿入します。
ドキュメントで フィールドを省略すると、どちらの方法も_id
を自動的に生成します。
挿入が成功した場合、両方のメソッドは新しい各ドキュメントの_id
を表す インスタンスを返します。