public void FSUpdateDocument()
        {
            FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Green, "\n:: Update/Create a Document ::\n");

            FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Yellow, "\nEnter Collection [cities]: ");
            string collectionId = Console.ReadLine();

            if (collectionId == "")
            {
                collectionId = "cities";
            }
            FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Yellow, "\nEnter Document Id: ");
            String   docId      = Console.ReadLine();
            Document updatedDoc = GetDocument(docId, collectionId);
            MapField <string, Value> fields;

            if (updatedDoc == null)
            {
                FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Yellow, "\nDocument within " + collectionId + " does not exist, create it (y/n): ");
                String ynValue = Console.ReadLine();
                if ((ynValue.ToLower() != "y") &&
                    (ynValue.ToLower() != "yes"))
                {
                    FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Red, "\nDocument update aborted, returning");
                    return;
                }
                updatedDoc      = new Document();
                updatedDoc.Name = Parent + "/documents/" + collectionId + "/" + docId;
                fields          = new MapField <string, Value>();
            }
            else
            {
                FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.White, "\nAvailable fields in this document to update:\n");
                Utils.ProcessFields(updatedDoc);
                fields = updatedDoc.Fields;
            }
            // update/create fields
            while (true)
            {
                FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Yellow, "\nEnter Field Name (blank when finished): ");
                string fieldName = Console.ReadLine();
                if (fieldName != "")
                {
                    FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Yellow, "\nEnter Field Value: ");
                    string fieldInValue = Console.ReadLine();
                    // TODO must query for type and handle!!!!
                    // TODO only handling string!!!!
                    Value fieldValue = new Value();
                    fieldValue.StringValue = fieldInValue;
                    if (fields.ContainsKey(fieldName))
                    {
                        fields[fieldName].StringValue = fieldInValue;
                    }
                    else
                    {
                        fields.Add(fieldName, fieldValue);
                    }
                }
                else
                {
                    break;
                }
            }
            var updateDocumentRequest = new UpdateDocumentRequest();

            updateDocumentRequest.Document = updatedDoc;
            Document returnDocument;

            try
            {
                returnDocument = FsClient.UpdateDocument(updateDocumentRequest);
            }
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
            }
            FirestoreTestUtils.ColoredConsoleWrite(ConsoleColor.Green, "\nSuccessfully updated document!\n");
        }