Example #1
0
 [InlineData(50000, new[] { "Canada", "France" })] // reduce key tree with depth 3
 public async Task MultipleReduceKeys(int numberOfUsers, string[] locations)
 {
     using (var a = new BasicAutoMapReduceIndexing(Output))
     {
         await a.MultipleReduceKeys(numberOfUsers, locations);
     }
 }
        public async Task MultipleAggregationFunctionsCanBeUsed()
        {
            using (var db = CreateDocumentDatabase())
                using (var mri = AutoMapReduceIndex.CreateNew(new AutoMapReduceIndexDefinition("Users", new[]
                {
                    new AutoIndexField
                    {
                        Name = "Count",
                        Aggregation = AggregationOperation.Count,
                        Storage = FieldStorage.Yes
                    },
                    new AutoIndexField
                    {
                        Name = "TotalCount",
                        Aggregation = AggregationOperation.Count,
                        Storage = FieldStorage.Yes
                    },
                    new AutoIndexField
                    {
                        Name = "Age",
                        Aggregation = AggregationOperation.Sum,
                        Storage = FieldStorage.Yes
                    }
                }, new[]
                {
                    new AutoIndexField
                    {
                        Name = "Location",
                        Storage = FieldStorage.Yes
                    },
                }), db))
                {
                    BasicAutoMapReduceIndexing.CreateUsers(db, 2, "Poland");

                    mri.DoIndexingWork(new IndexingStatsScope(new IndexingRunStats()), CancellationToken.None);

                    using (var context = DocumentsOperationContext.ShortTermSingleUse(db))
                    {
                        var queryResult = await mri.Query(new IndexQueryServerSide($"FROM INDEX '{mri.Name}'"), context, OperationCancelToken.None);

                        Assert.Equal(1, queryResult.Results.Count);
                        var result = queryResult.Results[0].Data;

                        string location;
                        Assert.True(result.TryGet("Location", out location));
                        Assert.Equal("Poland", location);

                        Assert.Equal(2L, result["Count"]);

                        Assert.Equal(2L, result["TotalCount"]);

                        Assert.Equal(41L, result["Age"]);
                    }

                    using (var context = DocumentsOperationContext.ShortTermSingleUse(db))
                    {
                        var queryResult = await mri.Query(new IndexQueryServerSide($"FROM INDEX '{mri.Name}' WHERE Count BETWEEN 2 AND 10"), context,
                                                          OperationCancelToken.None);

                        Assert.Equal(1, queryResult.Results.Count);
                    }

                    using (var context = DocumentsOperationContext.ShortTermSingleUse(db))
                    {
                        var queryResult = await mri.Query(new IndexQueryServerSide($"FROM INDEX '{mri.Name}' WHERE Count >= 10"), context, OperationCancelToken.None);

                        Assert.Equal(0, queryResult.Results.Count);
                    }
                }
        }