Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

db.collection.insert()

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作
  • WriteResult
  • BulkWriteResult

重要

非推奨の mongosh メソッド

このメソッドは mongoshでは非推奨です。 別のメソッドについては、「レガシーmongo shellとの互換性の変更 」を参照してください。

db.collection.insert()

ドキュメントをコレクションに挿入します。

次の値を返します。
  • 単一の挿入操作に対する WriteResult オブジェクト。

  • 一括挿入用のBulkWriteResultオブジェクト。

次の環境でホストされる配置には db.collection.Insert() を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

insert()メソッドの構文は次のとおりです。

db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
Parameter
タイプ
説明
document
ドキュメントまたは配列
コレクションに挿入するドキュメントまたはドキュメントの配列。
writeConcern
ドキュメント

任意。 書込み保証 ( write concern ) を表現するドキュメント。 デフォルトの書込み保証を使用する場合は省略します。 詳しくは、 書込み保証(write concern) を参照してください。

トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。

ordered
ブール値

任意。true に設定されている場合、配列内のドキュメントを順序付きで挿入します。いずれかのドキュメントでエラーが発生した場合、MongoDB は配列内の残りのドキュメントを処理せず、元に戻ります。

false に設定されている場合、順序なし挿入を実行します。いずれかのドキュメントでエラーが発生した場合は、配列内の残りのドキュメントの処理を続行します。

デフォルトは true です。

insert() は、操作のステータスを含むオブジェクトを返します。

insert() メソッドは、デフォルトの書込み保証(write concern)を使用する insert コマンドを使用します。デフォルト以外の書込み保証を指定するには、オプション パラメーターに書込み保証を含めます。

コレクションが存在しない場合、insert() メソッドによってコレクションが作成されます。

ドキュメントに _id フィールドが指定されていない場合、MongoDB は挿入操作を実行する前に、_id フィールドを追加し、そのドキュメントにユニークな ObjectId() を割り当てます。ほとんどのドライバーでは ObjectId が作成され、_id フィールドが挿入されますが、ドライバーやアプリケーションでこの処理が行われない場合は、mongod_id の作成と入力が行われます。

ドキュメントに _id フィールドが含まれる場合に重複キー エラーを回避するには、_id 値がコレクション内で一意になるようにする必要があります。

db.collection.insert()分散トランザクション内で使用できます。

重要

ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。

トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。

トランザクションがクロスシャード間書込みトランザクション(write transaction)でない場合に、分散トランザクション内にコレクションとインデックスを作成できます。

トランザクションにないコレクションに挿入を指定すると、MongoDB は暗黙的にコレクションを作成します。

Tip

以下も参照してください。

トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。

db.collection.insert()操作によってドキュメントが正常に挿入されると、その操作によってoplog (操作ログ)にエントリが追加されます。 操作が失敗した場合、その操作によって oplog にエントリが追加されることはありません。

以下の例では、products コレクションにドキュメントを挿入しています。コレクションが存在しない場合、insert() メソッドによってコレクションが作成されます。

次の例では、 insert()メソッドに渡されるドキュメントに_idフィールドが含まれていません。

db.products.insert( { item: "card", qty: 15 } )

挿入中に、mongod_id フィールドを作成し、挿入されたドキュメントによって検証されたユニークな ObjectId() 値をそのフィールドに割り当てます。

{ "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }

ObjectId 値は、操作が実行されるマシンと時間に固有であるため、実際の値は例の値と異なる可能性があります。

次の例では、insert() メソッドに渡されるドキュメントに _id フィールドが含まれています。重複キー エラーを回避するには、_id の値はコレクション内で一意である必要があります。

db.products.insert( { _id: 10, item: "box", qty: 20 } )

この操作を実行すると、次のドキュメントが products コレクションに挿入されます。

{ "_id" : 10, "item" : "box", "qty" : 20 }

次の例では、ドキュメントの配列をinsert()メソッドに渡して、3 つのドキュメントの一括挿入を実行します。 デフォルトでは、MongoDB は順序付き挿入を実行します。 順序付き挿入で、いずれかのドキュメントの挿入中にエラーが発生した場合、MongoDB は配列内の残りのドキュメントを処理せず、エラーを返します。

配列内のドキュメントは同じフィールドを持つ必要はありません。たとえば、配列の最初のドキュメントには_id フィールドと type フィールドがあります。2 番目と 3 番目のドキュメントには _id フィールドが含まれていないため、mongod は挿入中に 2 番目と 3 番目のドキュメントに _id フィールドを作成します。

db.products.insert(
[
{ _id: 11, item: "pencil", qty: 50, type: "no.2" },
{ item: "pen", qty: 20 },
{ item: "eraser", qty: 25 }
]
)

この操作により、次の 3 つのドキュメントが挿入されました。

{ "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" }
{ "_id" : ObjectId("51e0373c6f35bd826f47e9a0"), "item" : "pen", "qty" : 20 }
{ "_id" : ObjectId("51e0373c6f35bd826f47e9a1"), "item" : "eraser", "qty" : 25 }

次の例では、3 つのドキュメントを順序なしで挿入しています。順序なし挿入で、いずれかのドキュメントの挿入中にエラーが発生した場合、MongoDB は配列内の残りのドキュメントの挿入を続行します。

db.products.insert(
[
{ _id: 20, item: "lamp", qty: 50, type: "desk" },
{ _id: 21, item: "lamp", qty: 20, type: "floor" },
{ _id: 22, item: "bulk", qty: 100 }
],
{ ordered: false }
)

次のレプリカセットに対する操作では、w: 2書込み保証 (write concern)を指定し、タイムアウトを wtimeout で5000 ミリ秒に設定しています。この操作は、書込み (write) がプライマリと1つのセカンダリの両方に伝達された後に返すか、5 秒後にタイムアウトします。

db.products.insert(
{ item: "envelopes", qty : 100, type: "Clasp" },
{ writeConcern: { w: 2, wtimeout: 5000 } }
)

単一ドキュメントが渡されると、insert()WriteResultオブジェクトを返します。

insert()は、操作のステータスを含むWriteResult()オブジェクトを返します。 成功すると、 WriteResult()オブジェクトには挿入されたドキュメント数に関する情報が含まれます。

WriteResult({ "nInserted" : 1 })

insert()メソッドで書込み保証 (write concern) が発生した場合、結果にはWriteResult.writeConcernErrorフィールドが含まれます。

WriteResult({
"nInserted" : 1,
"writeConcernError"({
"code" : 64,
"errmsg" : "waiting for replication timed out",
"errInfo" : {
"wtimeout" : true,
"writeConcern" : {
"w" : "majority",
"wtimeout" : 100,
"provenance" : "getLastErrorDefaults"
}
}
})

Tip

以下も参照してください。

insert() メソッドで書込み保証(write concern)エラーが発生した場合、結果には WriteResult.writeError フィールドが含まれます。

WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_ dup key: { : 1.0 }"
}
})

ドキュメントの配列が渡されると、insert()BulkWriteResult() オブジェクトを返します。詳細については、「BulkWriteResult()」を参照してください。

戻る

db.collection.ideIndex