Exemple #1
0
        public async System.Threading.Tasks.Task FSRunQuery()
        {
            FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Green, "\n:: Running a query from Firestore... ::\n");
            FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Yellow, "\nUSA Cities with populations larger than 1 millon\n");

            var runQueryRequest = new RunQueryRequest();

            runQueryRequest.Parent = "projects/mch-test-49bba/databases/(default)" + "/documents";
            StructuredQuery sq = new StructuredQuery();

            // just look at cities!
            var colSel = new StructuredQuery.Types.CollectionSelector();

            colSel.CollectionId = "cities";
            sq.From.Add(colSel);

            // only get USA cities with more than 1 million people
            // define USA filter
            StructuredQuery.Types.Filter         countryFilter = new StructuredQuery.Types.Filter();
            StructuredQuery.Types.FieldFilter    fieldFilter   = new StructuredQuery.Types.FieldFilter();
            StructuredQuery.Types.FieldReference field         = new StructuredQuery.Types.FieldReference
            {
                FieldPath = "country"
            };
            fieldFilter.Field = field;
            fieldFilter.Op    = StructuredQuery.Types.FieldFilter.Types.Operator.Equal;
            Value filterValue = new Value
            {
                StringValue = "USA"
            };

            fieldFilter.Value         = filterValue;
            countryFilter.FieldFilter = fieldFilter;
            // define 1 Million filer
            StructuredQuery.Types.Filter populationFilter = new StructuredQuery.Types.Filter();
            fieldFilter = new StructuredQuery.Types.FieldFilter();
            field       = new StructuredQuery.Types.FieldReference
            {
                FieldPath = "population"
            };
            fieldFilter.Field = field;
            fieldFilter.Op    = StructuredQuery.Types.FieldFilter.Types.Operator.GreaterThanOrEqual;
            filterValue       = new Value
            {
                IntegerValue = 1000000
            };
            fieldFilter.Value            = filterValue;
            populationFilter.FieldFilter = fieldFilter;

            StructuredQuery.Types.CompositeFilter compositeFilter = new StructuredQuery.Types.CompositeFilter();
            compositeFilter.Filters.Add(countryFilter);
            compositeFilter.Filters.Add(populationFilter);
            compositeFilter.Op    = StructuredQuery.Types.CompositeFilter.Types.Operator.And;
            var where             = new StructuredQuery.Types.Filter();
            where.CompositeFilter = compositeFilter;
            sq.Where = where;

            runQueryRequest.StructuredQuery = sq;

            var select   = new StructuredQuery.Types.Projection();
            var fields   = select.Fields;
            var fieldRef = new StructuredQuery.Types.FieldReference
            {
                FieldPath = "name"
            };

            fields.Add(fieldRef);
            fieldRef = new StructuredQuery.Types.FieldReference
            {
                FieldPath = "population"
            };
            fields.Add(fieldRef);

            sq.Select = select;

            var runQueryResponse = new RunQueryResponse();

            try
            {
                var ret               = FsClient.RunQuery(runQueryRequest);
                var responseStream    = ret.ResponseStream;
                var cancellationToken = new System.Threading.CancellationToken();
                while (await responseStream.MoveNext(cancellationToken))
                {
                    runQueryResponse = responseStream.Current;
                    Utils.ReadDocument(runQueryResponse.Document);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
                return;
            }

            FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Green, "\nFinished running query!\n");
        }