Обновление каждого вложенного документа в массиве - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь использовать драйвер C # для mongodb, чтобы исправить некоторые данные.Мне нужно обновить некоторые свойства документа, а также свойства вложенных документов, хранящихся в массиве.

У меня сейчас есть рабочее решение, но оно кажется неэффективным.Есть ли способ динамического обновления значений без необходимости запуска отдельного оператора обновления для каждого элемента в массиве?

        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);
            }
...