Docs Menu
Docs Home
/ /

ドキュメントの挿入

このガイドでは、 Kotlinドライバーを使用して挿入操作を実行し、 MongoDBコレクションにドキュメントを追加する方法を学習できます。

挿入操作は 、1 つ以上の ドキュメント をMongoDBコレクションに挿入します。 次の方法を使用して、挿入操作を実行できます。

  • insertOne() : 単一のドキュメントを挿入する

  • insertMany() : 1 つ以上のドキュメントを挿入する

次の例では、塗料店にさまざまな色の塗料の在庫があります。 このデータは、次の Kotlin データ クラスでモデル化されます。

data class PaintOrder(
@BsonId val id: ObjectId? = null,
val qty: Int,
val color: String
)

MongoDB コレクションでは、各ドキュメントに一意の値を持つ_idフィールドが含まれている必要があります。

MongoDB では、このフィールドは次の 2 つの方法で管理できます。

  • このフィールドは各ドキュメントに自分で設定することができ、各_idフィールド値が一意であることを確認します。

  • ドライバーを使用して、各ドキュメント_idに対して一意のObjectId値を自動的に生成できます。 ドキュメントの_id値を手動で設定しない場合、ドライバーは フィールドにObjectIdを入力します。

一意性を保証できない限り、ドライバーに_id値を自動的に生成させることをお勧めします。

注意

重複した_id エラー

コレクションに重複する_id値を設定すると、一意のインデックス制約に違反するため、ドライバーはinsertOne()メソッドからWriteErrorを、またはinsertMany()メソッドからBulkWriteErrorを返します。

_idフィールドの詳細については、 MongoDBサーバーマニュアルの ユニークインデックスガイドを参照してください。

ドキュメント構造とルールの詳細については、 MongoDBサーバーマニュアルの ドキュメントガイドを参照してください。

単一のドキュメントを挿入する場合は、 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インスタンスから情報を取得できます。

方式
説明

getInsertedId()

挿入されたドキュメントの_id値を示します。

wasAcknowledged()

サーバーが結果を確認した場合はtrueを返します。

次のメソッドを使用して、 InsertOneResultインスタンスから情報を取得できます。

方式
説明

getInsertedIds()

挿入されたドキュメントの_id値を示します。

wasAcknowledged()

サーバーが結果を確認した場合はtrueを返します。

注意

wasAcknowledged()メソッドがfalseを返す場合、 _id値にアクセスしようとするとInvalidOperation例外が発生します。 サーバーが書込み (write) 操作を確認しない場合、ドライバーはこれらの値を決定できません。

次のセクションでは、insertOne() メソッドと insertMany() メソッドを使用してドキュメントを挿入する方法を示す完全に実行可能な例を示します。

このセクションの例では、Atlasサンプルデータセットsample_movies.moviesコレクションを使用します。無料のMongoDB Atlas クラスターを作成し、サンプルデータセットをロードする方法については、 MongoDB を使い始めるガイドを参照してください。

次の例では、 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(@BsonId 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=...}

次の例では、 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 ドキュメントを参照してください。

戻る

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

項目一覧