Мне нужно добавить в документ новые символы (UserWatchlistSetting.Watchlists.Symbols), причем символы не должны повторяться. То есть, если символ с определенным идентификатором уже существует, то другой символ с таким же идентификатором (даже если имя символа или дата создания разные) не должен добавляться в список.
Я пробовал работать в следующем направлении -
var baseFilter = Builders.Filter.Eq(x => x.UserId, userId);
var update = Builders.Update
.Push("Watchlists.$[d].Symbols", new Symbol { SymbolId = request.SymbolId, Name = request.SymbolName, Created = DateTime.UtcNow });
var filter1 = new BsonDocument("d.Id", $"{request.watchlistId}");
var filter2 = new BsonDocument("d.Symbols", new BsonDocument("$not", new BsonDocument("$elemMatch", new BsonDocument("d.Symbols$.SymbolId", $"{request.SymbolId}"))));
var arrayFilters = new List
{
new BsonDocumentArrayFilterDefinition(new BsonDocument("$and",new BsonArray(){ filter1, filter2}))
};
return await mongoCollection.FindOneAndUpdateAsync(
baseFilter,
update,
new FindOneAndUpdateOptions { IsUpsert = true, ReturnDocument = ReturnDocument.After, ArrayFilters = arrayFilters });
Этот код выполняется без ошибок, но символ не добавляется.
Мне нужна помощь с этим вопросом. У меня следующая структура - [code] { "UserWatchlistSetting":{ "Id": "b85ff2af-d745-4089-9683-b25c675a5406", "UserId": "de3f2757-b919-4091-9169-f5676573cd8e", "Watchlists": [ { "Id": "2d02a950-b91f-453f-ac7f-b56ad303ec64" "TradingAccountNumber": 100500, "Name": "MyWatchList", "Symbols": [ { "SymbolId": "7b977976-28b7-43d7-8acd-a3ae2ba9a463", "SymbolName": "SomeTradeSymbol1", "CreationDate": "2024-11-25T19:03:27.4678031+03:00" }, { "SymbolId": "7b977976-28b7-43d7-8acd-a3ae2ba9a463", "SymbolName": "SomeTradeSymbol2", "CreationDate": "2024-11-25T19:03:27.4678031+03:00" } ], "Created": "2024-11-25T17:50:57.6531431+03:00" } ], "Created": "2024-11-25T17:50:57.6464593+03:00", "Updated": "2024-11-25T17:59:22.6826342+03:00" } } [/code] Мне нужно добавить в документ новые символы (UserWatchlistSetting.Watchlists.Symbols), причем символы не должны повторяться. То есть, если символ с определенным идентификатором уже существует, то другой символ с таким же идентификатором (даже если имя символа или дата создания разные) не должен добавляться в список. Я пробовал работать в следующем направлении - [code] var baseFilter = Builders.Filter.Eq(x => x.UserId, userId);
var update = Builders.Update .Push("Watchlists.$[d].Symbols", new Symbol { SymbolId = request.SymbolId, Name = request.SymbolName, Created = DateTime.UtcNow });
var filter1 = new BsonDocument("d.Id", $"{request.watchlistId}"); var filter2 = new BsonDocument("d.Symbols", new BsonDocument("$not", new BsonDocument("$elemMatch", new BsonDocument("d.Symbols$.SymbolId", $"{request.SymbolId}")))); var arrayFilters = new List { new BsonDocumentArrayFilterDefinition(new BsonDocument("$and",new BsonArray(){ filter1, filter2})) };
return await mongoCollection.FindOneAndUpdateAsync( baseFilter, update, new FindOneAndUpdateOptions { IsUpsert = true, ReturnDocument = ReturnDocument.After, ArrayFilters = arrayFilters }); [/code] Этот код выполняется без ошибок, но символ не добавляется.