Обновить несколько документов в MongoDB c # -обновить массивы

#c# #mongodb #mongodb-query

#c# #mongodb #mongodb-запрос

Вопрос:

Я хочу обновить коллекцию документов в моей коллекции, я не просто хочу обновить поле объекта, а скорее весь объект> в настоящее время я выполняю обновление один за другим, используя UpdateAsync, но это очень медленно для нескольких объектов

 public class Car 
{
   public string Id {get;set;}
   public IEnumerable<string> Coulors {get;set;} // updated 
   public IEnumerable<Model> Models {get;set;} // updated
   public string Name {get;set;} // Not set 
}
public async void UpdateMany(IEnumerable<Car> cars)
{
    var filter = Builders<Car>.Filter.In(x => x.Id, cars.Select(x => x.Id));
    
    var update = Builders<Car>.Update.Set(x =< x.Colours , ??);
    //var update2 = Builders<Car>.Update.Set(x =< x.Models, ??);

    var options = new UpdateOptions { IsUpsert = true };

    return await DbSet.UpdateManyAsync(filter, update, options);
}
 

Ответ №1:

Комментарии:

1. спасибо, но нет, я специально ищу массовое обновление по соображениям производительности

2. Итак, у вас есть куча документов, и вы хотите заменить их все одним новым документом? Например. автомобиль 1 — это красный porsche 911, автомобиль 2 — зеленый honda civic, а автомобиль 3 — синий toyota rav4, и вы хотите обновить весь объект, чтобы все 3 машины теперь стали серебристыми chevy camaros? Мне трудно понять, что вы подразумеваете под «я не просто хочу обновить поле объекта, а скорее весь объект» — может быть, опубликовать 2 образца документов до и после ваших изменений?

3. Извините, я не понял, у меня есть куча документов для замены за один раз, я надеялся использовать UpdateMany….

4. У вас есть индекс в фильтре? что именно вы меняете — если вы меняете весь документ, то в итоге вы получите коллекцию одного и того же документа снова и снова. Наличие примеров документов до и после поможет понять, что вы пытаетесь сделать.

5. я меняю две коллекции на объекте: цветную строку [] и модель, которая представляет собой массив моделей, тогда есть одно или два других поля, которые я не обновлял. да, для каждого объекта есть идентификатор