使用資料分割時取得 Firestore 文件
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
使用資料分割時取得 Firestore 文件
深入探索
如需包含這個程式碼範例的詳細說明文件,請參閱下列內容:
程式碼範例
Node.js
如要向 Firestore 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
PHP
如要向 Firestore 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
Python
如要向 Firestore 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
Ruby
如要向 Firestore 進行驗證,請設定應用程式預設憑證。
詳情請參閱「為本機開發環境設定驗證」。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["難以理解","hardToUnderstand","thumb-down"],["資訊或程式碼範例有誤","incorrectInformationOrSampleCode","thumb-down"],["缺少我需要的資訊/範例","missingTheInformationSamplesINeed","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],[],[[["\u003cp\u003eThis document provides code samples in multiple languages (C#, Go, Node.js, PHP, Python, Ruby) for retrieving a total count from a Firestore document that uses sharding.\u003c/p\u003e\n"],["\u003cp\u003eThe core functionality involves iterating through a collection of "shards" within a document and summing up the "count" value from each shard to obtain the total.\u003c/p\u003e\n"],["\u003cp\u003eEach code sample requires the user to set up Application Default Credentials for Firestore authentication in their local development environment, which is further explained in the link provided.\u003c/p\u003e\n"],["\u003cp\u003eThe document also contains links to more detailed documentation on the topic of distributed counters to enhance the user's understanding of the use-case.\u003c/p\u003e\n"]]],[],null,["# Getting a Firestore document while using shards\n\nExplore further\n---------------\n\n\nFor detailed documentation that includes this code sample, see the following:\n\n- [Distributed counters](https://firebase.google.com/docs/firestore/solutions/counters)\n- [Support frequent and distributed counters](/firestore/native/docs/solutions/counters)\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 /// \u003csummary\u003e\n /// Get total count across all shards.\n /// \u003c/summary\u003e\n /// \u003cparam name=\"docRef\"\u003eThe document reference \u003csee cref=\"DocumentReference\"/\u003e\u003c/param\u003e\n /// \u003creturns\u003eThe \u003csee cref=\"int\"/\u003e\u003c/returns\u003e\n private static async Task\u003cint\u003e GetCountAsync(DocumentReference docRef)\n {\n var snapshotList = await docRef.Collection(\"shards\").GetSnapshotAsync();\n return snapshotList.Sum(shard =\u003e shard.GetValue\u003cint\u003e(\"count\"));\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 // getCount returns a total count across all shards.\n func (c *Counter) getCount(ctx context.Context, docRef *firestore.DocumentRef) (int64, error) {\n \tvar total int64\n \tshards := docRef.Collection(\"shards\").Documents(ctx)\n \tfor {\n \t\tdoc, err := shards.Next()\n \t\tif err == iterator.Done {\n \t\t\tbreak\n \t\t}\n \t\tif err != nil {\n \t\t\treturn 0, fmt.Errorf(\"Next: %w\", err)\n \t\t}\n\n \t\tvTotal := doc.Data()[\"Count\"]\n \t\tshardCount, ok := vTotal.(int64)\n \t\tif !ok {\n \t\t\treturn 0, fmt.Errorf(\"firestore: invalid dataType %T, want int64\", vTotal)\n \t\t}\n \t\ttotal += shardCount\n \t}\n \treturn total, nil\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 async function getCount(docRef) {\n const querySnapshot = await docRef.collection('shards').get();\n const documents = querySnapshot.docs;\n\n let count = 0;\n for (const doc of documents) {\n count += doc.get('count');\n }\n return count;\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 $result = 0;\n $docCollection = $db-\u003ecollection('samples/php/distributedCounters')-\u003edocuments();\n foreach ($docCollection as $doc) {\n $result += $doc-\u003edata()['Cnt'];\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 def get_count(self, doc_ref):\n \"\"\"Return a total count across all shards.\"\"\"\n total = 0\n shards = doc_ref.collection(\"shards\").list_documents()\n for shard in shards:\n total += shard.get().to_dict().get(\"count\", 0)\n return total\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 # project_id = \"Your Google Cloud Project ID\"\n # collection_path = \"shards\"\n\n require \"google/cloud/firestore\"\n\n firestore = Google::Cloud::https://cloud.google.com/ruby/docs/reference/google-cloud-firestore/latest/Google-Cloud-Firestore.html.https://cloud.google.com/ruby/docs/reference/google-cloud-firestore/latest/Google-Cloud-Firestore.html project_id: project_id\n\n shards_ref = firestore.https://cloud.google.com/ruby/docs/reference/google-cloud-firestore/latest/Google-Cloud-Firestore-Client.html collection_path\n\n count = 0\n shards_ref.get do |doc_ref|\n count += doc_ref[:count]\n end\n\n puts \"Count value is #{count}.\"\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)."]]