Overview
このガイドでは、 Kotlinドライバーを使用して挿入操作を実行し、 MongoDBコレクションにドキュメントを追加する方法を学習できます。
挿入操作は 、1 つ以上の ドキュメント をMongoDBコレクションに挿入します。 次の方法を使用して、挿入操作を実行できます。
insertOne(): 単一のドキュメントを挿入するinsertMany(): 1 つ以上のドキュメントを挿入する
サンプル データ
次の例では、塗料店にさまざまな色の塗料の在庫があります。 このデータは、次の Kotlin データ クラスでモデル化されます。
data class PaintOrder( val id: ObjectId? = null, val qty: Int, val color: String )
_id フィールド
MongoDB コレクションでは、各ドキュメントに一意の値を持つ_idフィールドが含まれている必要があります。
MongoDB では、このフィールドは次の 2 つの方法で管理できます。
このフィールドは各ドキュメントに自分で設定することができ、各
_idフィールド値が一意であることを確認します。ドライバーを使用して、各ドキュメント
_idに対して一意のObjectId値を自動的に生成できます。 ドキュメントの_id値を手動で設定しない場合、ドライバーは フィールドにObjectIdを入力します。
一意性を保証できない限り、ドライバーに_id値を自動的に生成させることをお勧めします。
注意
重複した_id エラー
コレクションに重複する_id値を設定すると、一意のインデックス制約に違反するため、ドライバーはinsertOne()メソッドからWriteErrorを、またはinsertMany()メソッドからBulkWriteErrorを返します。
_idフィールドの詳細については、 MongoDBサーバーマニュアルの ユニークインデックスガイドを参照してください。
ドキュメント構造とルールの詳細については、 MongoDBサーバーマニュアルの ドキュメントガイドを参照してください。
1つのドキュメントの挿入
単一のドキュメントを挿入する場合は、 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
複数のドキュメントの挿入
MongoDBコレクションに複数のドキュメントを追加するには 、insertMany() メソッドを使用して、追加するドキュメントのリストを渡します。insertMany() メソッドは、例外が発生するまで、指定された順序でドキュメントを挿入します(例外が発生する場合)。
成功した場合、メソッドは新しい各ドキュメントの _id を表す InsertManyResultインスタンスを返します。
次の例では、2 つのドキュメントを作成して List に追加し、insertMany() メソッドを使用して List を挿入します。
val paintOrders = listOf( PaintOrder(ObjectId(), 5, "red"), PaintOrder(ObjectId(), 10, "purple") ) val result = collection.insertMany(paintOrders) println("Inserted documents with the following ids: ${result.insertedIds.toList()}")
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]
戻り値
insertOne()メソッドはInsertOneResultインスタンスを返し、 insertMany()メソッドはInsertManyResultインスタンスを返します。
次のメソッドを使用して、 InsertOneResultインスタンスから情報を取得できます。
方式 | 説明 |
|---|---|
| 挿入されたドキュメントの |
| サーバーが結果を確認した場合は |
次のメソッドを使用して、 InsertOneResultインスタンスから情報を取得できます。
方式 | 説明 |
|---|---|
| 挿入されたドキュメントの |
| サーバーが結果を確認した場合は |
注意
wasAcknowledged()メソッドがfalseを返す場合、 _id値にアクセスしようとするとInvalidOperation例外が発生します。 サーバーが書込み (write) 操作を確認しない場合、ドライバーはこれらの値を決定できません。
完全に実行可能な例
次のセクションでは、insertOne() メソッドと insertMany() メソッドを使用してドキュメントを挿入する方法を示す完全に実行可能な例を示します。
サンプル データ
このセクションの例では、Atlasサンプルデータセットの sample_movies.moviesコレクションを使用します。無料のMongoDB Atlas クラスターを作成し、サンプルデータセットをロードする方法については、 MongoDB を使い始めるガイドを参照してください。
insertOne() の例: 完全なファイル
次の例では、 MongoDBクラスターに接続し、MongoClientオブジェクトを作成し、insertOne() メソッドを使用して moviesコレクションに単一のドキュメントを挿入します。
import com.mongodb.MongoException import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking import org.bson.codecs.pojo.annotations.BsonId import org.bson.types.ObjectId data class Movie( val id: ObjectId, val title: String, val genres: List<String>) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") try { val result = collection.insertOne( Movie(ObjectId(), "Ski Bloopers", listOf("Documentary", "Comedy")) ) println("Success! Inserted document id: " + result.insertedId) } catch (e: MongoException) { System.err.println("Unable to insert due to an error: $e") } mongoClient.close() }
Success! Inserted document id: BsonObjectId{value=...}
insertMany() の例: 完全なファイル
次の例では、 MongoDBクラスターに接続し、MongoClientオブジェクトを作成し、insertMany() メソッドを使用して複数のドキュメントを moviesコレクションに挿入しています。
import com.mongodb.MongoException import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking data class Movie(val title: String) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") val movieList = listOf( Movie("Short Circuit 3"), Movie("The Lego Frozen Movie") ) try { val result = collection.insertMany(movieList) println("Success! Inserted document ids: " + result.insertedIds) } catch (e: MongoException) { System.err.println("Unable to insert due to an error: $e") } mongoClient.close() }
Success! Inserted document ids: {0=BsonObjectId{value=...}, 1=BsonObjectId{value=...}}
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。