public async Task InsertData(string tileName, TileType tileType, BsonDocument newData, CancellationToken cancellationToken) { await _context.GetTiles().UpdateOneAsync( TileDbEntityExtensions.TileDbFilter(tileName, tileType), Builders <TileDbEntity> .Update.Push(x => x.Data, newData.ToBsonDocument()), null, cancellationToken); }
public async Task SetGroupToTile(string tileName, TileType tileType, string groupName, CancellationToken cancellationToken) { await Context.GetTiles().UpdateOneAsync( TileDbEntityExtensions.TileDbFilter(tileName, tileType), Builders <TileDbEntity> .Update.Set(x => x.Group, groupName), null, cancellationToken); }
public async Task <bool> AddDataAsync(string tileName, WeatherData weatherData, CancellationToken cancellationToken) { var result = await _context.GetTiles().UpdateOneAsync( TileDbEntityExtensions.TileDbFilter(tileName, TileType.Weather), Builders <TileDbEntity> .Update.Push(x => x.Data, weatherData.ToBsonDocument()), null, cancellationToken); return(result.ModifiedCount > 0); }
public async Task RemoveWeatherDataAsync(string tileName, Temperature temperature, Percentage humidity, CancellationToken cancellationToken) { var pullFilter = Builders <BsonDocument> .Filter.And( Builders <BsonDocument> .Filter.Eq(y => y[$"{nameof(WeatherData.Temperature)}.Value"], temperature.Value), Builders <BsonDocument> .Filter.Eq(y => y[$"{nameof(WeatherData.Humidity)}.Value"], humidity.Value)); await _context.GetTiles().UpdateOneAsync( TileDbEntityExtensions.TileDbFilter(tileName, TileType.Weather), Builders <TileDbEntity> .Update.PullFilter(x => x.Data, pullFilter), null, cancellationToken); }
public async Task <TileDbEntity> GetTileWithoutData(string tileName, TileType tileType, CancellationToken cancellationToken) { var projection = Builders <TileDbEntity> .Projection.FetchRecentData(0).FetchGroup().FetchConfiguration(); var tile = await _context.GetTiles().Find(TileDbEntityExtensions.TileDbFilter(tileName, tileType)).Project <TileDbEntity>(projection).SingleOrDefaultAsync(cancellationToken); if (tile.NotExists()) { throw new NotFoundException($"Tile {tileName} does not exist."); } return(tile); }
public async Task <TileDbEntity> GetTileDataSince(string tileName, TileType type, DateTimeOffset sinceDate, CancellationToken cancellationToken) { var filter = TileDbEntityExtensions.TileDbFilter(tileName, type); var onlyToday = Builders <BsonDocument> .Filter.Gte($"{nameof(TileDbEntity.Data)}.{nameof(TileData.AddedOn)}", sinceDate.UtcDateTime.ToString("yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture)); var group = BsonSerializer.Deserialize <BsonDocument>($"{{ _id: \"$_id\", Data: {{ $push: \"$Data\" }} }}"); return(await _context.GetTiles() .Aggregate() .Match(filter) .Unwind(x => x.Data) .Match(onlyToday) .Group(group) .As <TileDbEntity>() .SingleOrDefaultAsync(cancellationToken)); }