Query a Firestore collection
Stay organized with collections
Save and categorize content based on your preferences.
Query a Firestore collection
Explore further
For detailed documentation that includes this code sample, see the following:
Code sample
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],[],[[["\u003cp\u003eThis page demonstrates how to query a Firestore collection for documents that meet specific criteria, using the example of finding cities where the "capital" field is true.\u003c/p\u003e\n"],["\u003cp\u003eThe code samples show how to retrieve and iterate over the query results, presenting the data from each matching document, such as displaying city data.\u003c/p\u003e\n"],["\u003cp\u003eThe code samples provided are available in C#, Go, Java, Node.js, PHP, Python, and Ruby, allowing for usage within many contexts.\u003c/p\u003e\n"],["\u003cp\u003eProper authentication is required, and the code samples all show that setting up Application Default Credentials is required for it to work.\u003c/p\u003e\n"]]],[],null,["# Query a Firestore collection\n\nExplore further\n---------------\n\n\nFor detailed documentation that includes this code sample, see the following:\n\n- [Get data with Cloud Firestore](https://firebase.google.com/docs/firestore/query-data/get-data)\n- [Getting data](/firestore/native/docs/query-data/get-data)\n- [Perform simple and compound queries in Cloud Firestore](https://firebase.google.com/docs/firestore/query-data/queries)\n- [Query and filter data](/firestore/native/docs/query-data/queries)\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 Query capitalQuery = db.Collection(\"cities\").WhereEqualTo(\"Capital\", true);\n QuerySnapshot capitalQuerySnapshot = await capitalQuery.GetSnapshotAsync();\n foreach (DocumentSnapshot documentSnapshot in capitalQuerySnapshot.Documents)\n {\n Console.WriteLine(\"Document data for {0} document:\", documentSnapshot.Id);\n Dictionary\u003cstring, object\u003e city = documentSnapshot.ToDictionary();\n foreach (KeyValuePair\u003cstring, object\u003e pair in city)\n {\n Console.WriteLine(\"{0}: {1}\", pair.Key, pair.Value);\n }\n Console.WriteLine(\"\");\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\"fmt\"\n\n \t\"cloud.google.com/go/firestore\"\n \t\"google.golang.org/api/iterator\"\n )\n\n func multipleDocs(ctx context.Context, client *firestore.Client) error {\n \tfmt.Println(\"All capital cities:\")\n \titer := client.Collection(\"cities\").https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_Query_Where(\"capital\", \"==\", true).Documents(ctx)\n \tfor {\n \t\tdoc, err := iter.Next()\n \t\tif err == iterator.Done {\n \t\t\tbreak\n \t\t}\n \t\tif err != nil {\n \t\t\treturn err\n \t\t}\n \t\tfmt.Println(doc.https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_DocumentSnapshot_Data())\n \t}\n \treturn nil\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 // asynchronously retrieve multiple documents\n ApiFuture\u003cQuerySnapshot\u003e future = db.collection(\"cities\").whereEqualTo(\"capital\", true).get();\n // future.get() blocks on response\n List\u003cQueryDocumentSnapshot\u003e documents = future.get().getDocuments();\n for (DocumentSnapshot document : documents) {\n System.out.println(document.getId() + \" =\u003e \" + document.toObject(City.class));\n }\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 const citiesRef = db.collection('cities');\n const snapshot = await citiesRef.where('capital', '==', true).get();\n if (snapshot.empty) {\n console.log('No matching documents.');\n return;\n } \n\n snapshot.forEach(doc =\u003e {\n console.log(doc.id, '=\u003e', doc.data());\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 $citiesRef = $db-\u003ecollection('samples/php/cities');\n $query = $citiesRef-\u003ewhere('capital', '=', true);\n $documents = $query-\u003edocuments();\n foreach ($documents as $document) {\n if ($document-\u003eexists()) {\n printf('Document data for document %s:' . PHP_EOL, $document-\u003eid());\n print_r($document-\u003edata());\n printf(PHP_EOL);\n } else {\n printf('Document %s does not exist!' . PHP_EOL, $document-\u003eid());\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 # Note: Use of CollectionRef stream() is prefered to get()\n docs = (\n db.collection(\"cities\")\n .where(filter=FieldFilter(\"capital\", \"==\", True))\n .stream()\n )\n\n for doc in docs:\n print(f\"{doc.id} =\u003e {doc.to_dict()}\")\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 cities_ref = firestore.col collection_path\n\n query = cities_ref.where \"capital\", \"=\", true\n\n query.get do |city|\n puts \"#{city.document_id} data: #{city.data}.\"\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)."]]