AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

一括書き込み操作

このガイドでは、一括書込み操作を使用して、1 つのデータベース呼び出しで複数の書込み操作を実行する方法を学習できます。

ドキュメントを挿入し、複数の他のドキュメントを更新してから、ドキュメント を削除するシナリオを考えてみましょう。 個々のメソッドを使用する場合、各操作には独自のデータベース呼び出しが必要です。

一括書き込み操作 を使用すると、より少ないデータベース呼び出しで複数の書き込み操作を実行できます。 次のレベルで一括書き込み操作を実行できます。

  • コレクション : IMongoCollection.BulkWrite() メソッドまたは IMongoCollection.BulkWriteAsync() メソッドを使用して、単一のコレクションに対して一括書込み操作を実行できます。これらのメソッドは、書き込み操作の各タイプに対してデータベースを呼び出します。例、 メソッドは 1 回の呼び出しで複数のアップデート操作を実行しますが、 挿入操作と 置換操作 のためにデータベースに対して 2 回個別の呼び出しを行います。

  • クライアント :アプリケーションがMongoDB Serverバージョン 8.0 以降に接続している場合は、IMongoClient.BulkWrite() メソッドまたは IMongoClient.BulkWriteAsync() メソッドを使用して、同じクラスター内の複数のコレクションとデータベースに対して一括書込み操作を実行できます。このメソッドは、1 回のデータベース呼び出しですべての書き込み操作を実行します。

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

Tip

POCO を使用した一括書き込み操作

このガイドの例では、すべてのジェネリック クラスの TDocument 型の BsonDocument 型を使用します。これらのクラスには Plain Old CLR Object(POCO) を使用することもできます。 そのためには、コレクション内のドキュメントを表すクラスを定義する必要があります。 クラスには、ドキュメント内のフィールドと一致するプロパティが必要です。 詳しくは、「 POCO 」を参照してください。

一括書き込み操作には、1 つ以上の書き込み操作が含まれます。実行する書込み操作ごとに、次のいずれかの WriteModel<TDocument> クラスのインスタンスを作成します。

  • DeleteManyModel<TDocument>

  • DeleteOneModel<TDocument>

  • InsertOneModel<TDocument>

  • ReplaceOneModel<TDocument>

  • UpdateManyModel<TDocument>

  • UpdateOneModel<TDocument>

以下のセクションでは、前述のクラスのインスタンスを作成し、使用して、対応する書込み操作を一括書込み操作で実行する方法を示します。「 一括操作の実行 」セクションでは、モデルのリストを BulkWrite() または BulkWriteAsync() メソッドに渡して一括操作を実行する方法が説明されています。

挿入操作を実行するには、 InsertOneModel<TDocument>インスタンスを作成し、挿入するドキュメントを指定します。

次の例では、InsertOneModel<BsonDocument>クラスのインスタンスを作成しています。このインスタンスは、"name"フィールドが "Mongo's Deli" であるドキュメントを restaurantsコレクションに挿入するようにドライバーに指示します。

var insertOneModel = new InsertOneModel<BsonDocument>(
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Manhattan" },
{ "restaurant_id", "1234" }
}
);

複数のドキュメントを挿入するには、ドキュメントごとにInsertOneModel<TDocument>のインスタンスを作成します。

重要

重複キー エラー

一括操作を実行する場合、 InsertOneModel<TDocument>はコレクション内にすでに存在する_idを含むドキュメントを挿入できません。 この状況では、ドライバーはMongoBulkWriteExceptionをスローします。

単一のドキュメントを更新するには、UpdateOneModel<TDocument> のインスタンスを作成し、次の引数を渡します。

  • コレクション内のドキュメントをマッチングするために使用される基準を指定する クエリフィルター 。クエリの指定の詳細については、 MongoDB Serverマニュアルのクエリ演算子とプロジェクション 演算子を参照してください。

  • 実行する更新を説明する更新ドキュメント。更新を指定する方法の詳細については、 MongoDB Serverマニュアルの更新演算子を参照してください。

UpdateOneModel<TDocument>インスタンスは、クエリフィルターに一致する最初のドキュメントの更新を指定します。

次の コード例では、UpdateOneModel<BsonDocument>オブジェクトは restaurantsコレクションの更新操作を表しています。この操作は、nameフィールドの値が "Mongo's Deli" であるコレクション内の最初のドキュメントと一致します。次に、一致したドキュメントの cuisineフィールドの値を "Sandwiches and Salads" にアップデートします。

var updateOneModel = new UpdateOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"),
Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads")
);

複数のドキュメントを更新するには、 UpdateManyModel<TDocument>のインスタンスを作成し、 UpdateOneModel<TDocument>と同じ引数を渡します。 UpdateManyModel<TDocument>クラスは、クエリフィルターに一致するすべてのドキュメントのアップデートを指定します。

次の コード例では、UpdateManyModel<BsonDocument>オブジェクトは restaurantsコレクションの更新操作を表しています。この操作は、nameフィールドの値が "Mongo's Deli" であるコレクション内のすべてのドキュメントと一致します。次に、cuisineフィールドの値を "Sandwiches and Salads" にアップデートします。

var updateManyModel = new UpdateManyModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"),
Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads")
);

置換操作により、指定されたドキュメントのすべてのフィールドと値が削除され、指定した新しいフィールドと値に置き換えられます。 置換操作を実行するには、 ReplaceOneModel<TDocument>のインスタンスを作成し、クエリフィルターと、一致するドキュメントを置き換えるフィールドと値を渡します。

次の例では、ReplaceOneModel<BsonDocument>オブジェクトは restaurantsコレクションに対する置換操作を表しています。この操作は、restaurant_idフィールドの値が "1234" であるコレクション内のドキュメントと一致します。次に、このドキュメントから _id 以外のすべてのフィールドを削除し、namecuisineboroughrestaurant_id フィールドに新しい値を設定します。

var replaceOneModel = new ReplaceOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234"),
new BsonDocument{
{ "name", "Mongo's Pizza" },
{ "cuisine", "Pizza" },
{ "borough", "Brooklyn" },
{ "restaurant_id", "5678" }
}
);

複数のドキュメントを置き換えるには、ドキュメントごとにReplaceOneModel<TDocument>のインスタンスを作成する必要があります。

ドキュメントを削除するには、 DeleteOneModel<TDocument>のインスタンスを作成し、削除するドキュメントを指定するクエリフィルターを渡します。 DeleteOneModel<TDocument>インスタンスには、クエリフィルターに一致する最初のドキュメントのみを削除するための手順が記載されています。

次のコード例では、DeleteOneModel<BsonDocument>オブジェクトは restaurantsコレクションの削除操作を表しています。この操作は、restaurant_idフィールドの値が "5678" である最初のドキュメントを一致させ、削除します。

var deleteOneModel = new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
);

複数のドキュメントを削除するには、DeleteManyModel<TDocument> のインスタンスを作成し、削除するドキュメントを指定してクエリフィルターを渡します。DeleteManyModel<TDocument> のインスタンスには、 クエリフィルターに一致するすべてのドキュメントを削除するための手順が表示されます。

次のコード例では、DeleteManyModel<BsonDocument>オブジェクトは restaurantsコレクションの削除操作を表しています。この操作は、nameフィールドの値が "Mongo's Deli" であるすべてのドキュメントを照合して削除します。

var deleteManyModel = new DeleteManyModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli")
);

実行する操作ごとに WriteModelインスタンスを定義したら、IEnumerable インターフェースを実装するクラスのインスタンスを作成します。この IEnumerableWriteModel オブジェクトを追加し、IEnumerableBulkWrite() または BulkWriteAsync() メソッドに渡します。デフォルトでは 、これらのメソッドはリストで定義されている順序で操作を実行します。

Tip

IEnumerable

ArrayList は、IEnumerable インターフェースを実装する 2 つの一般的なクラスです。

同期 BulkWrite() メソッドと非同期 BulkWriteAsync() メソッドを使用して、restaurantsコレクションで一括書込み操作を実行する方法を表示するには、次のタブから を選択します。

var models = new List<WriteModel<BsonDocument>>
{
new InsertOneModel<BsonDocument>(
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Manhattan" },
{ "restaurant_id", "1234" }
}
),
new InsertOneModel<BsonDocument>(
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Brooklyn" },
{ "restaurant_id", "5678" }
}
),
new UpdateManyModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"),
Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads")
),
new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234")
)
};
var results = collection.BulkWrite(models);
Console.WriteLine(results);
var models = new List<WriteModel<BsonDocument>>
{
new InsertOneModel<BsonDocument>(
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Manhattan" },
{ "restaurant_id", "1234" }
}
),
new InsertOneModel<BsonDocument>(
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Brooklyn" },
{ "restaurant_id", "5678" }
}
),
new UpdateManyModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"),
Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads")
),
new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234")
)
};
var results = await collection.BulkWriteAsync(models);
Console.WriteLine(results);

上記のコード例では、次の出力が生成されます。

MongoDB.Driver.BulkWriteResult1+Acknowledged[MongoDB.Bson.BsonDocument]

注意

ドライバーが一括操作を実行する場合、ターゲット コレクションの書込み保証 (write concern) が使用されます。 ドライバーは、実行順序に関係なく、すべての操作を試行した後にすべての書込み保証 (write concern) エラーを報告します。

BulkWrite() または BulkWriteAsync() メソッドを呼び出すと、BulkWriteOptionsクラスのインスタンスを渡すことができます。BulkWriteOptionsクラスには、 一括書込み操作を構成するために使用できるオプションを表す次のプロパティが含まれています。

プロパティ
説明

BypassDocumentValidation

操作がドキュメントレベルの検証をバイパスするかどうかを指定します。詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは
Falseです。

Comment

操作に添付するコメント(BsonValue の形式)。詳細については、 MongoDB Serverマニュアルの 「削除コマンド フィールドのガイド」を参照してください。

IsOrdered

Trueの場合、ドライバーは指定された順序で書込み操作を実行します。エラーが発生した場合、残りの操作は試行されません。

Falseの場合、ドライバーは操作を任意の順序で実行し、すべての操作を実行しようとします。順序付けなし一括書き込み 内のいずれかの書き込み操作が失敗した場合、ドライバーはすべての操作を試行した後にのみエラーを報告します。デフォルトは
Trueです。

Let

パラメータ名と値のマップ(BsonDocument の形式)。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。

次のコード例では、BulkWriteOptionsオブジェクトを使用して順序なしの一括書込み操作を実行しています。

var models = new List<WriteModel<BsonDocument>>
{
new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
)
};
var options = new BulkWriteOptions
{
IsOrdered = false,
};
collection.BulkWrite(models, options);
var models = new List<WriteModel<BsonDocument>>
{
new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
)
};
var options = new BulkWriteOptions
{
IsOrdered = false,
};
await collection.BulkWriteAsync(models, options);

BulkWrite() メソッドと BulkWriteAsync() メソッドは、次のプロパティを含む BulkWriteResultオブジェクトを返します。

プロパティ
説明

IsAcknowledged

サーバーが一括書き込み操作を確認したかどうかを示します。このプロパティの値が False で、BulkWriteResultオブジェクトの他のプロパティにアクセスしようとすると、ドライバーは例外をスローします。

DeletedCount

削除されたドキュメントの数(存在する場合)。

InsertedCount

挿入されたドキュメントの数(存在する場合)。

MatchedCount

アップデートに一致したドキュメントの数(該当する場合)。

ModifiedCount

変更されたドキュメントの数(存在する場合)。

IsModifiedCountAvailable

変更されたカウントが利用可能かどうかを示します。

Upserts

アップサート操作を引き起こした各リクエストに関する情報を含むリスト。

RequestCount

一括操作内のリクエストの数。

一括書き込み操作のいずれかの操作が失敗した場合、 .NET/ C#ドライバーは BulkWriteError をスローし、それ以上の操作を実行しません。

BulkWriteErrorオブジェクトには、エラーを発生させたリクエストのインデックスを記述する Indexプロパティが含まれています。

MongoDB Server 8.0 以降を実行中配置に接続する場合、IMongoClient.BulkWrite() メソッドまたは IMongoClient.BulkWriteAsync() メソッドを使用して、同じクラスター内の複数のデータベースとコレクションに書込むことができます。これらのメソッドは、1 回の呼び出しですべての書き込み操作を実行します。

実行する書込み操作ごとに、次のいずれかの BulkWriteModel クラスのインスタンスを作成します。

  • BulkWriteInsertOneModel<TDocument>

  • BulkWriteUpdateOneModel<TDocument>

  • BulkWriteUpdateManyModel<TDocument>

  • BulkWriteReplaceOneModel<TDocument>

  • BulkWriteDeleteOneModel<TDocument>

  • BulkWriteDeleteManyModel<TDocument>

以下のセクションでは、前述のクラスのインスタンスを作成し、使用して、対応する書込み操作を一括書込みで実行する方法を示します。「 一括操作の実行 」セクションでは、モデルのリストを BulkWrite() または BulkWriteAsync() メソッドに渡して一括操作を実行する方法が説明されています。

挿入操作を実行するには、 BulkWriteInsertOneModel<TDocument>クラスのインスタンスを作成します。BulkWriteInsertOneModel<TDocument> コンストラクターは次のパラメーターを受け入れます。

Parameter
説明

collectionNamespace

BSONドキュメントを挿入するデータベースとコレクション。データ型:

stringまたは CollectionNamespace

document



コレクションに挿入するドキュメント。データ型:TDocument

次の例では、BulkWriteInsertOneModel<TDocument>クラスのインスタンスを作成しています。これらの インスタンスは、sample_restaurants.restaurants コレクションと sample_mflix.movies コレクションにドキュメントを挿入するようにドライバーに指示します。

var restaurantToInsert = new BulkWriteInsertOneModel<BsonDocument>(
"sample_restaurants.restaurants",
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Manhattan" },
{ "restaurant_id", "1234" }
}
);
var movieToInsert = new BulkWriteInsertOneModel<BsonDocument>(
"sample_mflix.movies",
new BsonDocument{
{ "title", "Silly Days" },
{ "year", 2022 }
}
);

単一のドキュメントを更新するには、BulkWriteUpdateOneModel<TDocument>クラスのインスタンスを作成します。BulkWriteUpdateOneModel<TDocument> コンストラクターは次のパラメーターを受け入れます。

Parameter
説明

collectionNamespace

BSONドキュメントを挿入するデータベースとコレクション。データ型:

stringまたは CollectionNamespace

filter

コレクション内のドキュメントを照合するために使用される基準を指定するクエリフィルター。UpdateOne 操作では、

クエリフィルターに一致する最初のドキュメントのみが更新されます。データ型: [FilterDefinition[TDocument]]<TDocument>

update

実行する更新操作。更新操作の詳細については、 MongoDB Serverマニュアルの「 フィールド更新演算子

」を参照してください。データ型: UpdateDefinition<TDocument>

collation

任意。結果をソートするときに使用する言語照合。詳細については、このページの「 照合

」セクションを参照してください。データ型: 照合
デフォルト:null

hint

任意。ドキュメントをスキャンするために使用するインデックス。詳細については、 MongoDB Server

のマニュアルを参照してください。データ型: BsonValue
デフォルト:null

isUpsert

任意。クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Server

のマニュアルを参照してください。データ型:boolean
デフォルト:false

arrayFilters

配列フィールドのアップデート操作でどの配列要素を変更するかを指定します。詳細については、 MongoDB Server のマニュアルを参照してください。データ型:

IEnumerable[ArrayFilterDefinition]>デフォルト:<ArrayFilterDefinition>
null

次のコード例では、BulkWriteUpdateOneModel<BsonDocument> オブジェクトは sample_restaurants.restaurants コレクションと sample_mflix.movies コレクションの更新操作を表します。

var restaurantUpdate = new BulkWriteUpdateOneModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"),
Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads")
);
var movieUpdate = new BulkWriteUpdateOneModel<BsonDocument>(
"sample_mflix.movies",
Builders<BsonDocument>.Filter.Eq("title", "Carrie"),
Builders<BsonDocument>.Update.Set("seen", True)
);

複数のドキュメントを更新するには、BulkWriteUpdateManyModel<TDocument>クラスのインスタンスを作成します。このクラスのコンストラクターは、BulkWriteUpdateOneModel<TDocument> コンストラクターと同じパラメーターを受け入れます。BulkWriteUpdateManyModel<TDocument>操作は、クエリフィルターに一致するすべてのドキュメントを更新します。

次の コード例では、BulkWriteUpdateManyModel<BsonDocument>オブジェクトは sample_restaurants.restaurantsコレクションの更新操作を表しています。この操作は、nameフィールドの値が "Starbucks" であるコレクション内のすべてのドキュメントと一致します。次に、cuisineフィールドの値を "Coffee (Chain)" にアップデートします。

var updateManyModel = new BulkWriteUpdateManyModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("name", "Starbucks"),
Builders<BsonDocument>.Update.Set("cuisine", "Coffee (Chain)")
);

ドキュメント内のフィールドを置き換えるには、BulkWriteReplaceOneModel<TDocument>クラスのインスタンスを作成します。BulkWriteReplaceOneModel<TDocument> コンストラクターは次のパラメーターを受け入れます。

Parameter
説明

collectionNamespace

BSONドキュメントを挿入するデータベースとコレクション。データ型:

stringまたは CollectionNamespace

filter

コレクション内のドキュメントを照合するために使用される基準を指定するクエリフィルター。UpdateOne 操作では、

クエリフィルターに一致する最初のドキュメントのみが更新されます。データ型: [FilterDefinition[TDocument]]<TDocument>

replacement



置換ドキュメント。これで、ターゲットドキュメントに挿入するフィールドと値を指定します。データ型:TDocument

collation

任意。結果をソートするときに使用する言語照合。詳細については、このページの「 照合

」セクションを参照してください。データ型: 照合
デフォルト:null

hint

任意。ドキュメントをスキャンするために使用するインデックス。詳細については、 MongoDB Server

のマニュアルを参照してください。データ型: BsonValue
デフォルト:null

isUpsert

任意。クエリフィルターに一致するドキュメントがない場合は、更新操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Server

のマニュアルを参照してください。データ型:boolean
デフォルト:false

次の例では、BulkWriteReplaceOneModel<BsonDocument> オブジェクトは sample_restaurants.restaurants コレクションと sample_mflix.movies コレクションに対する置換操作を表します。

var restaurantReplacement = new BulkWriteReplaceOneModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234"),
new BsonDocument{
{ "name", "Mongo's Pizza" },
{ "cuisine", "Pizza" },
{ "borough", "Brooklyn" },
{ "restaurant_id", "5678" }
}
);
var movieReplacement = new BulkWriteReplaceOneModel<BsonDocument>(
"sample_mflix.movies",
Builders<BsonDocument>.Filter.Eq("title", "Insomnia"),
new BsonDocument{
{ "name", "Loving Sylvie" },
{ "year", 1999 }
}
);

ドキュメントを削除するには、BulkWriteDeleteOneModel<TDocument>クラスのインスタンスを作成します。BulkWriteDeleteOneModel<TDocument> コンストラクターは次のパラメーターを受け入れます。

Parameter
説明

collectionNamespace

BSONドキュメントを挿入するデータベースとコレクション。データ型:

stringまたは CollectionNamespace

filter

DeleteOneコレクション内のドキュメントを照合するために使用される基準を指定するクエリフィルター。

操作では、クエリフィルターに一致する最初のドキュメントのみが削除されます。データ型: [FilterDefinition[TDocument]]<TDocument>

collation

任意。結果をソートするときに使用する言語照合。詳細については、このページの「 照合

」セクションを参照してください。データ型: 照合
デフォルト:null

hint

任意。ドキュメントをスキャンするために使用するインデックス。詳細については、 MongoDB Server

のマニュアルを参照してください。データ型: BsonValue
デフォルト:null

次のコード例では、BulkWriteDeleteOneModel<BsonDocument> オブジェクトは sample_restaurants.restaurants コレクションと sample_mflix.movies コレクションの削除操作を表しています。

var restaurantToDelete = new BulkWriteDeleteOneModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
);
var movieToDelete = new BulkWriteDeleteOneModel<BsonDocument>(
"sample_mflix.movies",
Builders<BsonDocument>.Filter.Eq("title", "Mr. Nobody")
);

複数のドキュメントを削除するには、BulkWriteDeleteManyModel<TDocument>クラスのインスタンスを作成し、削除するドキュメントを指定するクエリフィルターを渡します。DeleteMany操作により、クエリフィルターに一致するすべてのドキュメントが削除されます。

次のコード例では、BulkWriteDeleteManyModel<BsonDocument>オブジェクトは sample_restaurants.restaurantsコレクションの削除操作を表しています。この操作は、nameフィールドの値が "Mongo's Deli" であるすべてのドキュメントを照合して削除します。

var deleteManyModel = new BulkWriteDeleteManyModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli")
);

実行する操作ごとに BulkWriteModelインスタンスを定義したら、IReadOnlyList インターフェースを実装するクラスのインスタンスを作成します。この IReadOnlyListBulkWriteModel オブジェクトを追加し、IReadOnlyListBulkWrite() または BulkWriteAsync() メソッドに渡します。デフォルトでは 、これらのメソッドはコレクションで定義された順序で操作を実行します。

Tip

IReadOnlyList

ArrayList は、IReadOnlyList インターフェースを実装する 2 つの一般的なクラスです。

同期 BulkWrite() メソッドと非同期 BulkWriteAsync() メソッドを使用して複数の名前空間で一括書込み操作を実行する方法を表示するには、次のタブから を選択します。

var client = new MongoClient("mongodb://localhost:27017");
var restaurantNamespace = "sample_restaurants.restaurants";
var movieNamespace = "sample_mflix.movies";
var bulkWriteModels = new[]
{
new BulkWriteInsertOneModel<BsonDocument>(
restaurantNamespace,
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Manhattan" },
{ "restaurant_id", "1234" }
}
),
new BulkWriteInsertOneModel<BsonDocument>(
movieNamespace,
new BsonDocument{
{ "name", "Sarah's Secret" },
{ "year", 1988 }
}
),
new BulkWriteUpdateManyModel<BsonDocument>(
restaurantNamespace,
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"),
Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads")
),
new BulkWriteDeleteOneModel<BsonDocument>(
movieNamespace,
Builders<BsonDocument>.Filter.Eq("title", "House")
)
};
var result = client.BulkWrite(bulkWriteModels);
Console.WriteLine(result);
var client = new MongoClient("mongodb://localhost:27017");
var restaurantNamespace = "sample_restaurants.restaurants";
var movieNamespace = "sample_mflix.movies";
var bulkWriteModels = new[]
{
new BulkWriteInsertOneModel<BsonDocument>(
restaurantNamespace,
new BsonDocument{
{ "name", "Mongo's Deli" },
{ "cuisine", "Sandwiches" },
{ "borough", "Manhattan" },
{ "restaurant_id", "1234" }
}
),
new BulkWriteInsertOneModel<BsonDocument>(
movieNamespace,
new BsonDocument{
{ "name", "Sarah's Secret" },
{ "year", 1988 }
}
),
new BulkWriteUpdateManyModel<BsonDocument>(
restaurantNamespace,
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"),
Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads")
),
new BulkWriteDeleteOneModel<BsonDocument>(
movieNamespace,
Builders<BsonDocument>.Filter.Eq("title", "House")
)
};
var result = await client.BulkWriteAsync(bulkWriteModels);
Console.WriteLine(result);

上記のコード例では、次の出力が生成されます。

BulkWriteResult({'writeErrors': [], 'writeConcernErrors': [], 'nInserted': 2, 'nUpserted': 0, 'nMatched': 2, 'nModified': 2, 'nRemoved': 1, 'upserted': []}, acknowledged=True)

BulkWrite() または BulkWriteAsync() メソッドを呼び出すと、ClientBulkWriteOptionsクラスのインスタンスを渡すことができます。ClientBulkWriteOptionsクラスには、 一括書込み操作を構成するために使用できるオプションを表す次のプロパティが含まれています。

プロパティ
説明

BypassDocumentValidation

操作がドキュメントレベルの検証をバイパスするかどうかを指定します。詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは
falseです。

Comment

操作に添付するコメント(BsonValue の形式)。詳細については、 MongoDB Serverマニュアルの 「削除コマンド フィールドのガイド」を参照してください。

IsOrdered

trueの場合、ドライバーは指定された順序で書込み操作を実行します。エラーが発生した場合、残りの操作は試行されません。

falseの場合、ドライバーは操作を任意の順序で実行し、すべての操作を実行しようとします。順序付けなし一括書き込み 内のいずれかの書き込み操作が失敗した場合、ドライバーはすべての操作を試行した後にのみエラーを報告します。デフォルトは
Trueです。

Let

パラメータ名と値のマップ(BsonDocument の形式)。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。

VerboseResult

ClientBulkWriteResult操作によって返される オブジェクトに、成功した各 書込み操作の詳細な結果を含めるかどうかを指定します。デフォルトは
falseです。

WriteConcern

書込み操作に使用する書込み保証 (write concern)で、WriteConcern 列挙の値です。操作が実行中いるコレクションの書込み保証
(write concern)のデフォルトです。

次のコード例では、ClientBulkWriteOptionsオブジェクトを使用して 一括書込み操作 をカスタマイズします。

var client = new MongoClient("mongodb://localhost:27017");
var deleteOneModel = new BulkWriteDeleteOneModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
);
var clientBulkWriteOptions = new ClientBulkWriteOptions
{
IsOrdered = false,
WriteConcern = WriteConcern.Unacknowledged,
VerboseResult = true
};
var result = client.BulkWrite(deleteOneModel, clientBulkWriteOptions);
var client = new MongoClient("mongodb://localhost:27017");
var deleteOneModel = new BulkWriteDeleteOneModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
);
var clientBulkWriteOptions = new ClientBulkWriteOptions
{
IsOrdered = false,
WriteConcern = WriteConcern.Unacknowledged,
VerboseResult = true
};
var result = await client.BulkWriteAsync(deleteOneModel, clientBulkWriteOptions);

BulkWrite() メソッドと BulkWriteAsync() メソッドは、次のプロパティを含む ClientBulkWriteResultオブジェクトを返します。

プロパティ
説明

Acknowledged

サーバーが一括書き込み操作を確認したかどうかを示します。このプロパティの値が false で、ClientBulkWriteResultオブジェクトの他のプロパティにアクセスしようとすると、ドライバーは例外をスローします。

DeleteResults

成功した各 削除操作の結果を含む IReadOnlyDictionary<int, BulkWriteDeleteResult>オブジェクト(存在する場合)。

DeletedCount

削除されたドキュメントの数(存在する場合)。

InsertResults

成功した各 挿入操作の結果を含む IReadOnlyDictionary<int, BulkWriteInsertOneResult>オブジェクト(存在する場合)。

InsertedCount

挿入されたドキュメントの数(存在する場合)。

MatchedCount

アップデートに一致したドキュメントの数(該当する場合)。

ModifiedCount

変更されたドキュメントの数(存在する場合)。

UpsertResults

成功した各 更新操作の結果を含む IReadOnlyDictionary<int, BulkWriteUpdateResult>オブジェクト(存在する場合)。

UpsertedCount

アップサートされたドキュメントの数(存在する場合)。

一括書き込み操作のいずれかの操作が失敗した場合、 .NET/ C#ドライバーは ClientBulkWriteException をスローし、それ以上の操作を実行しません。

ClientBulkWriteExceptionオブジェクトには次のプロパティが含まれています。

プロパティ
説明

connectionId



接続識別子。データ型: ConnectionId

message



エラーメッセージ。データ型: string

writeErrors

一括書込み

(write)操作中に発生したエラーの辞書。データ型: IReadOnlyDictionary[int, WriteError] >

partialResult



例外がスローされる前に実行された成功した操作の結果。データ型: ClientBulkWriteResult

writeConcernErrors

一括書き込み操作の実行中に発生した書込み保証 (write concern)

エラーです。データ型: IReadOnlyList

innerException

内部例外。データ型:

例外

操作の照合を構成するには、照合クラスのインスタンスを作成します。

次の表では、Collation コンストラクターが受け入れるパラメーターを説明しています。また、各設定の値を読み取るために使用できる対応するクラスプロパティも一覧表示されます。

Parameter
説明
クラスプロパティ

locale

Unicode 用の国際コンポーネント(ICU)ロケールを指定します。サポートされているロケールのリストについては、 MongoDB Serverマニュアルの 「照合ロケールとデフォルト パラメーター」 を参照してください。単純なバイナリ比較を使用する場合は、

Collation.SimpleCollationlocale静的プロパティを使用して、 が"simple" に設定されている
オブジェクトを返します。データ型:string

Locale

caseLevel

(任意)大文字と小文字の比較を含めるかどうかを指定します。この引数が

trueの場合、ドライバーの動作は 引数の値によって異なります。strength

strengthCollationStrength.Primary の場合、ドライバーは基本文字と大文字と小文字を比較します。
- がstrength CollationStrength.Secondaryの場合、ドライバーは基本文字、発音区別符号、その他のセカンダリ レベルの相違、大文字と小文字を比較します。
-strength がその他の値の場合、この引数は無視されます。この引数が

falseの場合、ドライバーは強度レベルPrimary またはSecondary

での大文字と小文字の比較を含めません。データ型:boolean
デフォルト:false

CaseLevel

caseFirst



(任意)三次レベルの比較中に、大文字と小文字の相違のソート順序を指定します。データ型: CollationCateFirst
デフォルト:CollationCaseFirst.Off

CaseFirst

strength

(任意) ICU

ドキュメントで定義されている比較のレベルを指定します。データ型: 照合強度
デフォルト:CollationStrength.Tertiary

Strength

numericOrdering

(任意)ドライバーが数字の string を数値として比較するかどうかを指定します。この引数が

trueの場合、ドライバーは数字の string を数値として比較します。例、string "10 " と "2 " を比較する場合、ドライバーはその値を10 と2 として処理し、 が大きいことが検出されます。この引数が10

falseまたは除外されている場合、ドライバーは数字の string を string として比較します。例、string "10 " と "2 " を比較する場合、ドライバーは一度に 1 文字をずつ比較します。1 2"10 " は " " より小さいため、ドライバーは " " が "2 " より小さいことが検出されます。詳細については、

MongoDB Serverマニュアルの「 照合制限

」を参照してください。データ型:boolean
デフォルト:false

NumericOrdering

alternate

(任意)

ドライバーが空白と句読点を比較目的の基本文字として考慮するかどうかを指定します。データ型: CollationAlternate
デフォルト:CollationAlternate.NonIgnorable (スペースと句読点は基本文字と見なされます)

Alternate

maxVariable

(任意) alternateCollationAlternate.Shifted引数が

の場合にドライバーが無視可能と見なす文字を指定します。データ型: CollectionMaxVvariable
デフォルト:CollationMaxVariable.Punctuation (ドライバーは句読点とスペースを無視します)

MaxVariable

normalization



(任意)ドライバーが必要に応じてテキストを正規化するかどうかを指定します。ほとんどのテキストは正規化を必要としません。正規化の詳細については、 ICU

のドキュメントを参照してください。データ型:boolean
デフォルト:false

Normalization

backwards

(任意)発音区別符号を含む string を、string

の後ろから前にソートするかどうかを指定します。データ型:boolean
デフォルト:false

Backwards

照合の詳細については、 MongoDB Serverマニュアルの 照合 ページを参照してください。

個々の書込み操作を実行する方法については、次のガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。