1
クエリから取得した単一のドキュメントごとにデータベースに要求するのではなく、 WriteModel操作のリストを代わりに作成することができます。MongoでWriteModelのリストを効率的に作成するには?
var operationList = new List<WriteModel<JobInfoRecord>>();
using (var cursor = await jobInfoDocuments.Find(filter).Project(projectionDefinition).ToCursorAsync())
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
var newInfo = Regex.Replace(document.SerializedInfo, regex, EmptyTag);
// Applying several operations within the one request.
operationList.Add(new UpdateOneModel<JobInfoRecord>(Builders<JobInfoRecord>.Filter.Eq("_id", document.Id),
Builders<JobInfoRecord>.Update.Set("SerializedBackgroundJobInfo", newInfo)));
}
1000とクリアリストごとに1回実行するのは良いアルゴリズムですか?
if (operationList.Count <= 1000)
{
await jobInfoDocuments.BulkWriteAsync(operationList, writeOptions);
operationList = new List<WriteModel<JobInfoRecord>>();
}
そしてwhile (await cursor.MoveNextAsync())
確認後、私たちは何も
if (operationList.Count > 0)
{
await jobInfoDocuments.BulkWriteAsync(operationList, writeOptions);
}
を忘れていなかった場合、または私はただのif
声明なしforeach
ループの後に次の操作を実行できます。
await jobInfoDocuments.BulkWriteAsync(operationList, writeOptions);
operationList = new List<WriteModel<JobInfoRecord>>();
どうすべき私はforeach
ループの後に行うのですか?