Ejemplo n.º 1
0
 public static AstStage Densify(
     string fieldPath,
     DensifyRange range,
     IEnumerable <string> partitionByFieldPaths = null)
 {
     return(new AstDensifyStage(fieldPath, range, partitionByFieldPaths));
 }
        public void Densify_values_within_each_partition_example_using_linq_should_work()
        {
            RequireServer.Check().Supports(Feature.DensifyStage);
            var collection = CreateCoffeeCollection();
            var subject    = collection.AsQueryable();

            var queryable = subject.Densify(
                field: x => x.Altitude,
                range: DensifyRange.Numeric(DensifyBounds.Partition, step: 200),
                partitionByFields: x => x.Variety);

            var stages = Translate(collection, queryable);

            AssertStages(stages, "{ $densify : { field : 'Altitude', partitionByFields : ['Variety'], range : { step : 200, bounds : 'partition' } } }");

            var results         = queryable.ToList().Select(r => new { Variety = r.Variety, Altitude = r.Altitude }).OrderBy(r => r.Variety).ThenBy(r => r.Altitude).ToList();
            var expectedResults = new[]
            {
                new { Variety = "Arabica Typica", Altitude = 600 },
                new { Variety = "Arabica Typica", Altitude = 750 },
                new { Variety = "Arabica Typica", Altitude = 800 },
                new { Variety = "Arabica Typica", Altitude = 950 },
                new { Variety = "Gesha", Altitude = 1250 },
                new { Variety = "Gesha", Altitude = 1450 },
                new { Variety = "Gesha", Altitude = 1650 },
                new { Variety = "Gesha", Altitude = 1700 }
            };

            results.Should().Equal(expectedResults);
        }
        public void Densify_time_series_data_example_using_linq_should_work()
        {
            RequireServer.Check().Supports(Feature.DensifyStage);
            var collection = CreateWeatherCollection();
            var subject    = collection.AsQueryable();

            var lowerBound = DateTime.Parse("2021-05-18T00:00:00.000Z");
            var upperBound = DateTime.Parse("2021-05-18T08:00:00.000Z");

            var queryable = subject.Densify(
                field: x => x.Timestamp,
                range: DensifyRange.DateTime(lowerBound, upperBound, step: 1, DensifyDateTimeUnit.Hours));

            var stages = Translate(collection, queryable);

            AssertStages(stages, "{ $densify : { field : 'Timestamp', range : { step : 1, unit : 'hour', bounds : [ISODate('2021-05-18T00:00:00.000Z'), ISODate('2021-05-18T08:00:00.000Z')] } } }");

            var results            = queryable.ToList();
            var timestamps         = results.Select(r => r.Timestamp).OrderBy(t => t).ToList();
            var expectedTimestamps = new[]
            {
                "2021-05-18T00:00:00.000Z",
                "2021-05-18T01:00:00.000Z",
                "2021-05-18T02:00:00.000Z",
                "2021-05-18T03:00:00.000Z",
                "2021-05-18T04:00:00.000Z",
                "2021-05-18T05:00:00.000Z",
                "2021-05-18T06:00:00.000Z",
                "2021-05-18T07:00:00.000Z",
                "2021-05-18T08:00:00.000Z",
                "2021-05-18T12:00:00.000Z"
            };

            timestamps.Should().Equal(expectedTimestamps.Select(t => JsonConvert.ToDateTime(t)));
        }
Ejemplo n.º 4
0
 public AstDensifyStage(
     string fieldPath,
     DensifyRange range,
     IEnumerable <string> partitionByFieldPaths = null)
 {
     _fieldPath             = Ensure.IsNotNull(fieldPath, nameof(fieldPath));
     _range                 = Ensure.IsNotNull(range, nameof(range));
     _partitionByFieldPaths = partitionByFieldPaths?.AsReadOnlyList();
 }
        public void Densify_the_full_range_of_values_example_using_aggregate_should_work(bool usingExpressions)
        {
            RequireServer.Check().Supports(Feature.DensifyStage);
            var collection = CreateCoffeeCollection();
            var subject    = collection.Aggregate();

            IAggregateFluent <CoffeeInfo> aggregate;

            if (usingExpressions)
            {
                aggregate = subject.Densify(
                    field: x => x.Altitude,
                    range: DensifyRange.Numeric(DensifyBounds.Full, step: 200),
                    partitionByFields: x => x.Variety);
            }
            else
            {
                aggregate = subject.Densify(
                    field: "Altitude",
                    range: DensifyRange.Numeric(DensifyBounds.Full, step: 200),
                    partitionByFields: "Variety");
            }

            var stages = Translate(collection, aggregate);

            AssertStages(stages, "{ $densify : { field : 'Altitude', partitionByFields : ['Variety'], range : { step : 200, bounds : 'full' } } }");

            var results         = aggregate.ToList().Select(r => new { Variety = r.Variety, Altitude = r.Altitude }).OrderBy(r => r.Variety).ThenBy(r => r.Altitude).ToList();
            var expectedResults = new[]
            {
                new { Variety = "Arabica Typica", Altitude = 600 },
                new { Variety = "Arabica Typica", Altitude = 750 },
                new { Variety = "Arabica Typica", Altitude = 800 },
                new { Variety = "Arabica Typica", Altitude = 950 },
                new { Variety = "Arabica Typica", Altitude = 1000 },
                new { Variety = "Arabica Typica", Altitude = 1200 },
                new { Variety = "Arabica Typica", Altitude = 1400 },
                new { Variety = "Arabica Typica", Altitude = 1600 },
                new { Variety = "Gesha", Altitude = 600 },
                new { Variety = "Gesha", Altitude = 800 },
                new { Variety = "Gesha", Altitude = 1000 },
                new { Variety = "Gesha", Altitude = 1200 },
                new { Variety = "Gesha", Altitude = 1250 },
                new { Variety = "Gesha", Altitude = 1400 },
                new { Variety = "Gesha", Altitude = 1600 },
                new { Variety = "Gesha", Altitude = 1700 }
            };

            results.Should().Equal(expectedResults);
        }