#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:
Похоже, вы хотите «заменить» — https://api.mongodb.com/csharp/current/html/M_MongoDB_Driver_IMongoCollection_1_ReplaceOne.htm
Комментарии:
1. спасибо, но нет, я специально ищу массовое обновление по соображениям производительности
2. Итак, у вас есть куча документов, и вы хотите заменить их все одним новым документом? Например. автомобиль 1 — это красный porsche 911, автомобиль 2 — зеленый honda civic, а автомобиль 3 — синий toyota rav4, и вы хотите обновить весь объект, чтобы все 3 машины теперь стали серебристыми chevy camaros? Мне трудно понять, что вы подразумеваете под «я не просто хочу обновить поле объекта, а скорее весь объект» — может быть, опубликовать 2 образца документов до и после ваших изменений?
3. Извините, я не понял, у меня есть куча документов для замены за один раз, я надеялся использовать UpdateMany….
4. У вас есть индекс в фильтре? что именно вы меняете — если вы меняете весь документ, то в итоге вы получите коллекцию одного и того же документа снова и снова. Наличие примеров документов до и после поможет понять, что вы пытаетесь сделать.
5. я меняю две коллекции на объекте: цветную строку [] и модель, которая представляет собой массив моделей, тогда есть одно или два других поля, которые я не обновлял. да, для каждого объекта есть идентификатор