firestore/api/GetData/Program.cs (219 lines of code) (raw):

// Copyright(c) 2017 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. using CommandLine; using Google.Cloud.Firestore; using System; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using System.Threading; using System.Linq; namespace GoogleCloudSamples { public class GetData { public static string Usage = @"Usage: C:\> dotnet run command YOUR_PROJECT_ID Where command is one of retrieve-create-examples get-doc-as-map get-doc-as-entity get-multiple-docs get-all-docs add-subcollection get-collections "; private static async Task RetrieveCreateExamples(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_get_dataset] CollectionReference citiesRef = db.Collection("cities"); await citiesRef.Document("SF").SetAsync(new Dictionary<string, object>(){ { "Name", "San Francisco" }, { "State", "CA" }, { "Country", "USA" }, { "Capital", false }, { "Population", 860000 } }); await citiesRef.Document("LA").SetAsync(new Dictionary<string, object>(){ { "Name", "Los Angeles" }, { "State", "CA" }, { "Country", "USA" }, { "Capital", false }, { "Population", 3900000 } }); await citiesRef.Document("DC").SetAsync(new Dictionary<string, object>(){ { "Name", "Washington D.C." }, { "State", null }, { "Country", "USA" }, { "Capital", true }, { "Population", 680000 } }); await citiesRef.Document("TOK").SetAsync(new Dictionary<string, object>(){ { "Name", "Tokyo" }, { "State", null }, { "Country", "Japan" }, { "Capital", true }, { "Population", 9000000 } }); await citiesRef.Document("BJ").SetAsync(new Dictionary<string, object>(){ { "Name", "Beijing" }, { "State", null }, { "Country", "China" }, { "Capital", true }, { "Population", 21500000 } }); Console.WriteLine("Added example cities data to the cities collection."); // [END firestore_data_get_dataset] } private static async Task GetDocAsMap(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_get_as_map] DocumentReference docRef = db.Collection("cities").Document("SF"); DocumentSnapshot snapshot = await docRef.GetSnapshotAsync(); if (snapshot.Exists) { Console.WriteLine("Document data for {0} document:", snapshot.Id); Dictionary<string, object> city = snapshot.ToDictionary(); foreach (KeyValuePair<string, object> pair in city) { Console.WriteLine("{0}: {1}", pair.Key, pair.Value); } } else { Console.WriteLine("Document {0} does not exist!", snapshot.Id); } // [END firestore_data_get_as_map] } // A custom City class used by the GetDocAsEntity function. [FirestoreData] public class City { [FirestoreProperty] public string Name { get; set; } [FirestoreProperty] public string State { get; set; } [FirestoreProperty] public string Country { get; set; } [FirestoreProperty] public bool Capital { get; set; } [FirestoreProperty] public long Population { get; set; } } private static async Task GetDocAsEntity(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_get_as_custom_type] DocumentReference docRef = db.Collection("cities").Document("BJ"); DocumentSnapshot snapshot = await docRef.GetSnapshotAsync(); if (snapshot.Exists) { Console.WriteLine("Document data for {0} document:", snapshot.Id); City city = snapshot.ConvertTo<City>(); Console.WriteLine("Name: {0}", city.Name); Console.WriteLine("State: {0}", city.State); Console.WriteLine("Country: {0}", city.Country); Console.WriteLine("Capital: {0}", city.Capital); Console.WriteLine("Population: {0}", city.Population); } else { Console.WriteLine("Document {0} does not exist!", snapshot.Id); } // [END firestore_data_get_as_custom_type] } private static async Task GetMultipleDocs(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_query] Query capitalQuery = db.Collection("cities").WhereEqualTo("Capital", true); QuerySnapshot capitalQuerySnapshot = await capitalQuery.GetSnapshotAsync(); foreach (DocumentSnapshot documentSnapshot in capitalQuerySnapshot.Documents) { Console.WriteLine("Document data for {0} document:", documentSnapshot.Id); Dictionary<string, object> city = documentSnapshot.ToDictionary(); foreach (KeyValuePair<string, object> pair in city) { Console.WriteLine("{0}: {1}", pair.Key, pair.Value); } Console.WriteLine(""); } // [END firestore_data_query] } private static async Task GetAllDocs(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_get_all_documents] Query allCitiesQuery = db.Collection("cities"); QuerySnapshot allCitiesQuerySnapshot = await allCitiesQuery.GetSnapshotAsync(); foreach (DocumentSnapshot documentSnapshot in allCitiesQuerySnapshot.Documents) { Console.WriteLine("Document data for {0} document:", documentSnapshot.Id); Dictionary<string, object> city = documentSnapshot.ToDictionary(); foreach (KeyValuePair<string, object> pair in city) { Console.WriteLine("{0}: {1}", pair.Key, pair.Value); } Console.WriteLine(""); } // [END firestore_data_get_all_documents] } private static async Task AddSubcollection(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_add_sub_collection] DocumentReference cityRef = db.Collection("cities").Document("SF"); CollectionReference subcollectionRef = cityRef.Collection("neighborhoods"); Dictionary<string, object> data = new Dictionary<string, object> { { "name", "Marina" }, }; await subcollectionRef.Document("Marina").SetAsync(data); // [END firestore_data_add_sub_collection] Console.WriteLine("Added data to the Marina document in the neighborhoods subcollection in the SF document in the cities collection."); } private static async Task GetCollections(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_get_sub_collections] DocumentReference cityRef = db.Collection("cities").Document("SF"); IAsyncEnumerable<CollectionReference> subcollections = cityRef.ListCollectionsAsync(); IAsyncEnumerator<CollectionReference> subcollectionsEnumerator = subcollections.GetAsyncEnumerator(default); while (await subcollectionsEnumerator.MoveNextAsync()) { CollectionReference subcollectionRef = subcollectionsEnumerator.Current; Console.WriteLine("Found subcollection with ID: {0}", subcollectionRef.Id); } // [END firestore_data_get_sub_collections] } public static void Main(string[] args) { if (args.Length < 2) { Console.Write(Usage); return; } string command = args[0].ToLower(); string project = string.Join(" ", new ArraySegment<string>(args, 1, args.Length - 1)); switch (command) { case "retrieve-create-examples": RetrieveCreateExamples(project).Wait(); break; case "get-doc-as-map": GetDocAsMap(project).Wait(); break; case "get-doc-as-entity": GetDocAsEntity(project).Wait(); break; case "get-multiple-docs": GetMultipleDocs(project).Wait(); break; case "get-all-docs": GetAllDocs(project).Wait(); break; case "add-subcollection": AddSubcollection(project).Wait(); break; case "get-collections": GetCollections(project).Wait(); break; default: Console.Write(Usage); return; } } } }