Problem zaczyna się, gdy próbujesz zbudować swoją Update
oświadczenie. Jak zapewne wiesz -1
przekazany jako indeks będzie przetłumaczone
do operatora pozycyjnego $
. dokumentacja
mówi, że
Dodatkowo próbujesz zbudować warunek filtrowania za pomocą SingleOrDefault
a sterownik .NET MongoDB nie jest w stanie przetłumaczyć tego na żaden operator składni zapytań MongoDB.
Jak to naprawić?
Zamiast używać operatora pozycyjnego, możesz spróbować użyć operatora filtrowanego pozycyjnego składnia.
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);