Search code examples
c#mongodb

Update array specific items


I want only items in list entityParameters will update in x.Params by Id , update all items of entityParameters if entityParameters.Id == x.Params.Id

List<Param> entityParameters

filter = Builders<MachineObj>.Filter.Where(x => x.MachineId == id);

update = Builders<MachineObj>.Update
            .Set(x => x.Params, entityParameters);

Solution

  •         List<ArrayFilterDefinition> arrayFilters = new();
            int i = 0;
            foreach (var item in entityParameters)
            {
                var updateItem = Builders<MachineObj>.Update.Set($"Params.$[elem{i}]", item);
    
                arrayFilters.Add(new BsonDocumentArrayFilterDefinition<BsonDocument>(
                   new BsonDocument($"elem{i}.ParamId", item.ParamId)
                ));
    
                update = Builders<MachineObj>.Update.Combine(update, updateItem);
    
                i++;
            }
    
            updateOptions = new UpdateOptions
            {
                ArrayFilters = arrayFilters
            };
    
        await machinesDB.Machines.UpdateOneAsync(filter, update, updateOptions);