AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
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 の場合、ドライバーは操作を任意の順序で実行し、すべての操作を実行しようとします。順序付きでない一括書き込み内のいずれかの書き込み (write) 操作が失敗した場合、ドライバーはすべての操作を試行した後にのみエラーを報告します。
デフォルトは 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>

update

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

データ型: UpdateDefinition<TDocument>

collation

任意.結果をソートするときに使用する言語照合。詳細については、このページの「照合」セクションを参照してください。

データ型: 照合
デフォルト: null

hint

任意.ドキュメントをスキャンするために使用するインデックス。詳細については、MongoDB Server マニュアルを参照してください。

データ型: BsonValue
デフォルト: null

isUpsert

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

データ型: boolean
デフォルト: false

arrayFilters

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

データ型: IEnumerable<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>

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>

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

Let

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

VerboseResult

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

WriteConcern

書き込み (write) 操作に使用する書込み保証 (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

バルク書き込み操作中に発生したエラーの辞書。

データ型: IReadOnlyDictionary<int, WriteError>

partialResult

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

データ型: ClientBulkWriteResult

writeConcernErrors

バルク書き込み操作の実行中に発生した書込み保証エラー。

データ型: IReadOnlyList<MongoWriteConcernException>

innerException

内部例外。

データ型: 例外

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

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

Parameter
説明
クラスプロパティ

locale

国際化コンポーネント for Unicode (ICU) ロケールを指定します。サポートされているロケールの一覧については、MongoDB Server マニュアルの「照合ロケールとデフォルトパラメータ」を参照してください。

単純なバイナリ比較を使用する場合は、Collation.Simple 静的プロパティを使用して、locale"simple" に設定された Collation オブジェクトを返します。
データ型: string

Locale

caseLevel

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

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

- strengthCollationStrength.Primary の場合、ドライバーは基本文字と大文字と小文字を比較します。
- strengthCollationStrength.Secondary の場合、ドライバーは基本文字、分音符号、その他の二次的な違い、および大文字と小文字を比較します。
- strength がその他の値の場合、この引数は無視されます。

この引数が false の場合、ドライバーは強度レベル Primary または Secondary での大文字と小文字の比較を含みません。

データ型: boolean
デフォルト: false

CaseLevel

caseFirst

(任意) 三次レベルの比較中の大文字と小文字の相違のソート順序を指定します。

データ型: CollationCaseFirst
デフォルト: CollationCaseFirst.Off

CaseFirst

strength

(任意) ICU ドキュメントで定義されている、実行する比較のレベルを指定します。

データ型: CollationStrength
デフォルト: CollationStrength.Tertiary

Strength

numericOrdering

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

この引数が true の場合、ドライバーは数値型文字列を数値として比較します。例えば、文字列 "10" と "2" を比較する場合、ドライバーは値を 10 と 2 として取り扱い、10 が大きいことを確認します。

この引数が false の場合、または除外される場合、ドライバーは数値型文字列を文字列として比較します。例えば、文字列 "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 ドキュメントを参照してください。