我正在尝试对mongodb使用C#驱动程序来修复一些数据。我需要更新文档的某些属性,以及存储在数组中的子文档中的属性。
我目前有一个可行的解决方案,但效率似乎很低。有没有一种方法可以动态更新值,而不必为数组中的每个元素运行单独的更新语句?
var jobs = db.GetCollection<JobDocument>("jobs");
var filter = Builders<JobDocument>.Filter.Empty;
var result = jobs.Find(filter).ToList();
foreach (var job in result)
{
var updateFilter = Builders<JobDocument>.Filter.Eq(j => j._id, job._id);
var wrongDate = job.dueDate;
var fixedDate = FixDate(wrongDate);
var update = Builders<JobDocument>.Update.Set(j => j.dueDate, fixedDate);
var updateResult = await jobs.UpdateOneAsync(updateFilter, update);
//Update each work order
foreach(var wo in job.workOrders)
{
var woElemFilter = Builders<JobDocument>.Filter.ElemMatch(x => x.workOrders, f => f._id == wo._id);
var woFilter = Builders<JobDocument>.Filter.And(updateFilter, woElemFilter);
var wrongWoDueDate = wo.dueDate;
var fixedWoDueDate = FixDate(wrongWoDueDate);
var woUpdate = Builders<JobDocument>.Update.Set(j => j.workOrders[-1].dueDate, fixedWoDueDate);
var woUpdateResult = await jobs.UpdateOneAsync(woFilter, woUpdate);
}