Como atualizar um documento do Firestore em uma transação
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Como atualizar um documento do Firestore em uma transação
Mais informações
Para ver a documentação detalhada que inclui este exemplo de código, consulte:
Exemplo de código
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],[],[[["\u003cp\u003eThis document provides code samples demonstrating how to update a Firestore document within a transaction across various programming languages.\u003c/p\u003e\n"],["\u003cp\u003eThe examples showcase how to retrieve a document snapshot, modify data, and commit the changes using a transaction, ensuring data consistency.\u003c/p\u003e\n"],["\u003cp\u003eEach code sample focuses on incrementing the population field of a "cities" collection's "SF" document, illustrating a common transaction use case.\u003c/p\u003e\n"],["\u003cp\u003eThe document highlights the importance of setting up Application Default Credentials for authenticating to Firestore in a local development environment.\u003c/p\u003e\n"],["\u003cp\u003eIt directs users to additional resources for further exploration of transactions and batched writes in Firestore, as well as the Google Cloud sample browser for more examples.\u003c/p\u003e\n"]]],[],null,["# Updating a Firestore document in a transaction\n\nExplore further\n---------------\n\n\nFor detailed documentation that includes this code sample, see the following:\n\n- [Transactions and batched writes](/firestore/native/docs/manage-data/transactions)\n- [Transactions and batched writes](https://firebase.google.com/docs/firestore/manage-data/transactions)\n\nCode sample\n-----------\n\n### C#\n\n\nTo authenticate to Firestore, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n DocumentReference cityRef = db.Collection(\"cities\").Document(\"SF\");\n await db.RunTransactionAsync(async transaction =\u003e\n {\n DocumentSnapshot snapshot = await transaction.GetSnapshotAsync(cityRef);\n long newPopulation = snapshot.GetValue\u003clong\u003e(\"Population\") + 1;\n Dictionary\u003cstring, object\u003e updates = new Dictionary\u003cstring, object\u003e\n {\n { \"Population\", newPopulation}\n };\n transaction.Update(cityRef, updates);\n });\n\n### Go\n\n\nTo authenticate to Firestore, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n\n import (\n \t\"context\"\n \t\"log\"\n\n \t\"cloud.google.com/go/firestore\"\n )\n\n func runSimpleTransaction(ctx context.Context, client *firestore.Client) error {\n \t// ...\n\n \tref := client.Collection(\"cities\").Doc(\"SF\")\n \terr := client.https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_Client_RunTransaction(ctx, func(ctx context.Context, tx *firestore.Transaction) error {\n \t\tdoc, err := tx.Get(ref) // tx.Get, NOT ref.Get!\n \t\tif err != nil {\n \t\t\treturn err\n \t\t}\n \t\tpop, err := doc.https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_DocumentSnapshot_DataAt(\"population\")\n \t\tif err != nil {\n \t\t\treturn err\n \t\t}\n \t\treturn tx.Set(ref, map[string]interface{}{\n \t\t\t\"population\": pop.(int64) + 1,\n \t\t}, firestore.https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_MergeAll)\n \t})\n \tif err != nil {\n \t\t// Handle any errors appropriately in this section.\n \t\tlog.Printf(\"An error has occurred: %s\", err)\n \t}\n\n \treturn err\n }\n\n### Java\n\n\nTo authenticate to Firestore, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n // Initialize doc\n final DocumentReference docRef = db.collection(\"cities\").document(\"SF\");\n City city = new City(\"SF\");\n city.setCountry(\"USA\");\n city.setPopulation(860000L);\n docRef.set(city).get();\n\n // run an asynchronous transaction\n ApiFuture\u003cVoid\u003e futureTransaction =\n db.runTransaction(\n transaction -\u003e {\n // retrieve document and increment population field\n DocumentSnapshot snapshot = transaction.get(docRef).get();\n long oldPopulation = snapshot.getLong(\"population\");\n transaction.update(docRef, \"population\", oldPopulation + 1);\n return null;\n });\n // block on transaction operation using transaction.get()\n\n### Node.js\n\n\nTo authenticate to Firestore, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n // Initialize document\n const cityRef = db.collection('cities').doc('SF');\n await cityRef.set({\n name: 'San Francisco',\n state: 'CA',\n country: 'USA',\n capital: false,\n population: 860000\n });\n\n try {\n await db.runTransaction(async (t) =\u003e {\n const doc = await t.get(cityRef);\n\n // Add one person to the city population.\n // Note: this could be done without a transaction\n // by updating the population using FieldValue.increment()\n const newPopulation = doc.data().population + 1;\n t.update(cityRef, {population: newPopulation});\n });\n\n console.log('Transaction success!');\n } catch (e) {\n console.log('Transaction failure:', e);\n }\n\n### PHP\n\n\nTo authenticate to Firestore, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n $cityRef = $db-\u003ecollection('samples/php/cities')-\u003edocument('SF');\n $db-\u003erunTransaction(function (Transaction $transaction) use ($cityRef) {\n $snapshot = $transaction-\u003esnapshot($cityRef);\n $newPopulation = $snapshot['population'] + 1;\n $transaction-\u003eupdate($cityRef, [\n ['path' =\u003e 'population', 'value' =\u003e $newPopulation]\n ]);\n });\n\n### Python\n\n\nTo authenticate to Firestore, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n transaction = db.transaction()\n city_ref = db.collection(\"cities\").document(\"SF\")\n\n @firestore.transactional\n def update_in_transaction(transaction, city_ref):\n snapshot = city_ref.get(transaction=transaction)\n transaction.update(city_ref, {\"population\": snapshot.get(\"population\") + 1})\n\n update_in_transaction(transaction, city_ref)\n\n### Ruby\n\n\nTo authenticate to Firestore, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n city_ref = firestore.doc \"#{collection_path}/SF\"\n\n firestore.transaction do |tx|\n new_population = tx.get(city_ref).data[:population] + 1\n puts \"New population is #{new_population}.\"\n tx.update city_ref, { population: new_population }\n end\n\nWhat's next\n-----------\n\n\nTo search and filter code samples for other Google Cloud products, see the\n[Google Cloud sample browser](/docs/samples?product=firestore)."]]