Bạn cần có toán tử $ positional
nơi bạn có thể chỉ định điều kiện mức tài liệu và điều kiện mức mảng để tìm một mục lồng nhau trong một mảng tài liệu cụ thể. Trong C # $
dấu hiệu được đại diện bởi -1
được truyền dưới dạng chỉ mục của mảng mô hình của bạn. Hãy thử:
var col = mydb.GetCollection<Document>("collectionName");
var id = new ObjectId("5babaaf5509f6d342da5abaa");
var elementName = "Car";
var newValue = 2;
var filterBuilder = Builders<Document>.Filter;
var filter = filterBuilder.Eq(x => x.Id, id) &
filterBuilder.ElemMatch(doc => doc.Elements, el => el.Name == elementName);
var updateBuilder = Builders<Document>.Update;
var update = updateBuilder.Set(doc => doc.Elements[-1].Value, newValue);
Col.UpdateOne(filter, update);