public async Task TrackUsagesAsync(UsageUpdate update) { Guard.NotNull(update, nameof(update)); if (update.Counters.Count > 0) { var(filter, updateStatement) = CreateOperation(update); await Collection.UpdateOneAsync(filter, updateStatement, Upsert); } }
public async Task TrackUsagesAsync(UsageUpdate update, CancellationToken ct = default) { Guard.NotNull(update); if (update.Counters.Count > 0) { var(filter, updateStatement) = CreateOperation(update); await Collection.UpdateOneAsync(filter, updateStatement, Upsert, ct); } }
private static (FilterDefinition <MongoUsage>, UpdateDefinition <MongoUsage>) CreateOperation(UsageUpdate usageUpdate) { var id = $"{usageUpdate.Key}_{usageUpdate.Date:yyyy-MM-dd}_{usageUpdate.Category}"; var update = Update .SetOnInsert(x => x.Key, usageUpdate.Key) .SetOnInsert(x => x.Date, usageUpdate.Date) .SetOnInsert(x => x.Category, usageUpdate.Category); foreach (var(key, value) in usageUpdate.Counters) { update = update.Inc($"Counters.{key}", value); } var filter = Filter.Eq(x => x.Id, id); return(filter, update); }