ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

一括書込み (write)

一括書き込み API は、1 つのコマンドでサーバーに複数の書き込み操作を送信します。 複数の書き込みを一度に実行する際に、ネットワーク ラウンド トリップの回数を減らすには、 一括書き込み API を使用します。 たとえば、複数の更新を効率的に実行するには、次の操作を実行します。

collection = client['colors']
collection.bulk_write([
{
update_one: {
filter: {name: 'yellow'},
update: {'$set' => {hex: 'ffff00'}},
},
},
{
update_one: {
filter: {name: 'purple'},
update: {'$set' => {hex: '800080'}},
},
},
], ordered: true, write_concern: {w: :majority})

次の例は、同じリクエストで異なるタイプの操作を実行する方法を示しています。

collection.bulk_write([
{ insert_one: { x: 1 } },
{ update_one: {
filter: { x: 1 },
update: {'$set' => { x: 2 } },
} },
{ replace_one: {
filter: { x: 2 },
replacement: { x: 3 },
} },
], :ordered => true)

bulk_writeの最初の引数は、実行する操作のリストです。 各操作は、操作名と操作仕様のキーを対応する値として 1 つだけ含むハッシュとして指定する必要があります。 サポートされている操作の詳細を以下に示します。 bulk_writeメソッドは次のオプションも受け入れます。

オプション
説明

bypass_document_validation

trueまたはfalse 。 ドキュメント検証をバイパスするかどうか。

ordered

orderedオプションがtrue (デフォルト)に設定されている場合、操作は順番に適用され、いずれかの操作が失敗した場合は、後続の操作は試行されません。 orderedオプションがfalseに設定されている場合、指定されたすべての操作が試行されます。

write_concern

操作の 書込み保証 (write concern) 。ハッシュとして指定されます。

有効な一括書込み操作は次のとおりです。

{ insert_one: { x: 1 } }

注意

insert_many一括操作はありません。 複数のドキュメントを挿入するには、複数のinsert_one操作を指定します。

{ update_one: {
filter: { x: 1 },
update: { '$set' => { x: 2 } },
# upsert is optional and defaults to false
upsert: true,
} }
{ update_many: {
filter: { x: 1 },
update: { '$set' => { x: 2 } },
# upsert is optional and defaults to false
:upsert => true,
} }
{ replace_one: {
filter: { x: 1 },
replacement: { x: 2 },
# upsert is optional and defaults to false
upsert: true,
} }

注意

:replace_one操作では、置き換え値がドキュメントである必要があります。 :replace_oneは、置換値内の MongoDB 更新演算子を認識しません。 将来のリリースでは、ドライバーは置換ドキュメントで$で始まるキーの使用を禁止する予定です。

{ delete_one: {
filter: { x: 1 },
} }
{ delete_many: {
filter: { x: 1 },
} }

ドライバーを使用すると、アプリケーションは任意の大きな一括書込みリクエストを送信できます。 ただし、MongoDB サーバーはコマンド ドキュメントのサイズを制限しているため(現在、この制限は 48 MiB です)、この制限を超える一括書込みは複数のリクエストに分割されます。

クライアント側の暗号化を使用すると、一括書き込み分割に使用されるしきい値が小さくされ、暗号テキストのオーバーヘッドが可能になります。