コード例 #1
0
 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);
 }
コード例 #2
0
 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);
 }
コード例 #3
0
        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);
        }
コード例 #4
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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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));
        }