Bulk.insert()
Tip
MongoDB は、一括書込み操作を実行するための db.collection.bulkWrite()
メソッドも提供します。
説明
Bulk.insert(<document>)
一括操作リストに 挿入操作 を追加します。
Bulk.insert()
は、次のパラメーターを受け入れます。Parameterタイプ説明doc
ドキュメント挿入するドキュメント。ドキュメントのサイズは最大 BSON ドキュメント サイズ以下である必要があります。
動作
不正確な挿入
挿入中にサーバー エラーが発生した場合でも、一部のドキュメントは挿入されている可能性があります。
挿入が成功すると、システムはコレクションに挿入されたドキュメントの数である BulkWriteResult.nInserted
を返します。レプリカセットの状態が変化して挿入操作が中断された場合でも、システムはドキュメントの挿入を続行できます。その結果、 BulkWriteResult.nInserted
が報告するドキュメント数は実際に挿入された数より少なくなる場合があります。
無作為データのパフォーマンスに関する考慮事項
インデックス フィールドで大量の無作為データ(例: ハッシュされたインデックス)の挿入操作が実行される場合、挿入パフォーマンスが低下することがあります。無作為データを一括挿入すると、無作為のインデックスエントリが作成され、インデックスのサイズが増大します。無作為な挿入ごとに別のインデックスエントリへのアクセスが必要なサイズにインデックスが達した場合、挿入により WiredTiger キャッシュがエビクションおよび置き換えられる率が上昇します。こうした場合、インデックスは完全にキャッシュされなくなり、ディスク上で更新されるため、パフォーマンスが低下します。
インデックス フィールドでの無作為データの一括挿入動作を向上させるには、次のいずれかを実行します。
インデックスを削除し、無作為データを挿入した後に再度作成します。
インデックスのない空のコレクションにデータを挿入します。
一括挿入後にインデックスを作成すると、メモリ内のデータがソートされ、すべてのインデックスに対して順序付き挿入が実行されます。
例
以下の例では、 items
コレクションの Bulk()
操作ビルダーを初期化し、複数のドキュメントを追加するための一連の挿入操作を追加します。
var bulk = db.items.initializeUnorderedBulkOp(); bulk.insert( { item: "abc123", defaultQty: 100, status: "A", points: 100 } ); bulk.insert( { item: "ijk123", defaultQty: 200, status: "A", points: 200 } ); bulk.insert( { item: "mop123", defaultQty: 0, status: "P", points: 0 } ); bulk.execute();