Effectuer une mise à jour d'un document Firestore dans une transaction
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Effectuer une mise à jour d'un document Firestore dans une transaction
En savoir plus
Pour obtenir une documentation détaillée incluant cet exemple de code, consultez les articles suivants :
Exemple de code
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","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)."]]