更新数组中的每个子文档

时间:2019-01-31 01:04:52

标签: mongodb mongodb-csharp-2.0

我正在尝试对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);
            }

0 个答案:

没有答案