firestore/api/AddData/Program.cs (270 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; namespace GoogleCloudSamples { public class AddData { public static string Usage = @"Usage: C:\> dotnet run command YOUR_PROJECT_ID Where command is one of add-doc-as-map update-create-if-missing add-doc-data-types add-simple-doc-as-entity set-requires-id add-doc-data-with-auto-id add-doc-data-after-auto-id update-doc update-nested-fields update-server-timestamp update-document-array "; private static async Task AddDocAsMap(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_from_map] DocumentReference docRef = db.Collection("cities").Document("LA"); Dictionary<string, object> city = new Dictionary<string, object> { { "name", "Los Angeles" }, { "state", "CA" }, { "country", "USA" } }; await docRef.SetAsync(city); // [END firestore_data_set_from_map] Console.WriteLine("Added data to the LA document in the cities collection."); } private static async Task UpdateCreateIfMissing(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_doc_upsert] DocumentReference docRef = db.Collection("cities").Document("LA"); Dictionary<string, object> update = new Dictionary<string, object> { { "capital", false } }; await docRef.SetAsync(update, SetOptions.MergeAll); // [END firestore_data_set_doc_upsert] Console.WriteLine("Merged data into the LA document in the cities collection."); } private static async Task AddDocDataTypes(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_from_map_nested] DocumentReference docRef = db.Collection("data").Document("one"); Dictionary<string, object> docData = new Dictionary<string, object> { { "stringExample", "Hello World" }, { "booleanExample", false }, { "numberExample", 3.14159265 }, { "nullExample", null }, { "arrayExample", new object[] { 5, true, "Hello" } }, { "objectExample", new Dictionary<string, object> { { "a", 5 }, { "b", true}, } } }; await docRef.SetAsync(docData); // [END firestore_data_set_from_map_nested] Console.WriteLine("Set multiple data-type data for the one document in the data collection."); } // [START firestore_data_custom_type_definition] [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; } } // [END firestore_data_custom_type_definition] private static async Task AddSimpleDocAsEntity(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_from_custom_type] DocumentReference docRef = db.Collection("cities").Document("LA"); City city = new City { Name = "Los Angeles", State = "CA", Country = "USA", Capital = false, Population = 3900000L }; await docRef.SetAsync(city); // [END firestore_data_set_from_custom_type] Console.WriteLine("Added custom City object to the cities collection."); } private static async Task SetRequiresId(string project) { FirestoreDb db = FirestoreDb.Create(project); Dictionary<string, object> city = new Dictionary<string, object> { { "Name", "Phuket" }, { "Country", "Thailand" } }; // [START firestore_data_set_id_specified] await db.Collection("cities").Document("new-city-id").SetAsync(city); // [END firestore_data_set_id_specified] Console.WriteLine("Added document with ID: new-city-id."); } private static async Task AddDocDataWithAutoId(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_id_random_collection] Dictionary<string, object> city = new Dictionary<string, object> { { "Name", "Tokyo" }, { "Country", "Japan" } }; DocumentReference addedDocRef = await db.Collection("cities").AddAsync(city); Console.WriteLine("Added document with ID: {0}.", addedDocRef.Id); // [END firestore_data_set_id_random_collection] } private static async Task AddDocDataAfterAutoId(string project) { FirestoreDb db = FirestoreDb.Create(project); Dictionary<string, object> city = new Dictionary<string, object> { { "Name", "Moscow" }, { "Country", "Russia" } }; // [START firestore_data_set_id_random_document_ref] DocumentReference addedDocRef = db.Collection("cities").Document(); Console.WriteLine("Added document with ID: {0}.", addedDocRef.Id); await addedDocRef.SetAsync(city); // [END firestore_data_set_id_random_document_ref] Console.WriteLine("Added data to the {0} document in the cities collection.", addedDocRef.Id); } private static async Task UpdateDoc(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_field] DocumentReference cityRef = db.Collection("cities").Document("new-city-id"); Dictionary<string, object> updates = new Dictionary<string, object> { { "Capital", false } }; await cityRef.UpdateAsync(updates); // You can also update a single field with: await cityRef.UpdateAsync("Capital", false); // [END firestore_data_set_field] Console.WriteLine("Updated the Capital field of the new-city-id document in the cities collection."); } private static async Task UpdateNestedFields(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_nested_fields] DocumentReference frankDocRef = db.Collection("users").Document("frank"); Dictionary<string, object> initialData = new Dictionary<string, object> { { "Name", "Frank" }, { "Age", 12 } }; Dictionary<string, object> favorites = new Dictionary<string, object> { { "Food", "Pizza" }, { "Color", "Blue" }, { "Subject", "Recess" }, }; initialData.Add("Favorites", favorites); await frankDocRef.SetAsync(initialData); // Update age and favorite color Dictionary<string, object> updates = new Dictionary<string, object> { { "Age", 13 }, { "Favorites.Color", "Red" }, }; // Asynchronously update the document await frankDocRef.UpdateAsync(updates); // [END firestore_data_set_nested_fields] Console.WriteLine("Updated the age and favorite color fields of the Frank document in the users collection."); } private static async Task UpdateServerTimestamp(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_server_timestamp] DocumentReference cityRef = db.Collection("cities").Document("new-city-id"); await cityRef.UpdateAsync("Timestamp", Timestamp.GetCurrentTimestamp()); // [END firestore_data_set_server_timestamp] Console.WriteLine("Updated the Timestamp field of the new-city-id document in the cities collection."); } private static async Task UpdateDocumentArray(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_array_operations] DocumentReference washingtonRef = db.Collection("cities").Document("DC"); // Atomically add a new region to the "regions" array field. await washingtonRef.UpdateAsync("Regions", FieldValue.ArrayUnion("greater_virginia")); // Atomically remove a region from the "regions" array field. await washingtonRef.UpdateAsync("Regions", FieldValue.ArrayRemove("east_coast")); // [END firestore_data_set_array_operations] Console.WriteLine("Updated the Regions array of the DC document in the cities collection."); } private static async Task UpdateDocumentIncrement(string project) { FirestoreDb db = FirestoreDb.Create(project); // [START firestore_data_set_numeric_increment] DocumentReference washingtonRef = db.Collection("cities").Document("DC"); // Atomically increment the population of the city by 50. await washingtonRef.UpdateAsync("Regions", FieldValue.Increment(50)); // [END firestore_data_set_numeric_increment] Console.WriteLine("Updated the population of the DC document in the cities collection."); } 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 "add-doc-as-map": AddDocAsMap(project).Wait(); break; case "update-create-if-missing": UpdateCreateIfMissing(project).Wait(); break; case "add-doc-data-types": AddDocDataTypes(project).Wait(); break; case "add-simple-doc-as-entity": AddSimpleDocAsEntity(project).Wait(); break; case "set-requires-id": SetRequiresId(project).Wait(); break; case "add-doc-data-with-auto-id": AddDocDataWithAutoId(project).Wait(); break; case "add-doc-data-after-auto-id": AddDocDataAfterAutoId(project).Wait(); break; case "update-doc": UpdateDoc(project).Wait(); break; case "update-nested-fields": UpdateNestedFields(project).Wait(); break; case "update-server-timestamp": UpdateServerTimestamp(project).Wait(); break; case "update-document-array": UpdateDocumentArray(project).Wait(); break; case "update-document-increment": UpdateDocumentIncrement(project).Wait(); break; default: Console.Write(Usage); return; } } } }