Sự cố bắt đầu xảy ra khi bạn đang cố gắng tạo Update
của mình bản tường trình. Như bạn có thể biết -1
được chuyển dưới dạng chỉ mục sẽ là đã dịch
tới toán tử $ positional
. tài liệu
nói rằng
Ngoài ra, bạn đang cố gắng xây dựng điều kiện lọc của mình bằng cách sử dụng SingleOrDefault
và trình điều khiển .NET MongoDB không thể dịch điều đó thành bất kỳ toán tử cú pháp truy vấn MongoDB nào.
Làm cách nào để khắc phục điều đó?
Thay vì sử dụng toán tử vị trí, bạn có thể thử sử dụng toán tử được lọc theo vị trí cú pháp.
var filter = Builders<NodeBoardModel>.Filter.Eq(f => f.Id, sId);
var update = Builders<NodeBoardModel>.Update.Set("RemoteBoard.apps.$[app].objects.$[object].config_docs.$[configdoc].config_dt", dtUpdated);
var arrayFilters = new List<ArrayFilterDefinition>();
ArrayFilterDefinition<BsonDocument> appFilter = new BsonDocument("app.appname", new BsonDocument("$eq", sAppName));
ArrayFilterDefinition<BsonDocument> objectFilter = new BsonDocument("object.name", new BsonDocument("$eq", sModelName));
ArrayFilterDefinition<BsonDocument> configDocFilter = new BsonDocument("configdoc.config_id", new BsonDocument("$eq", iObjectId));
arrayFilters.AddRange(new[] { appFilter, objectFilter, configDocFilter });
var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters };
var res = Col.UpdateOne(filter, update, updateOptions);