Firestore ウォッチ リスナーで変更タイプを確認する
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Firestore ウォッチ リスナーで変更タイプを確認する
もっと見る
このコードサンプルを含む詳細なドキュメントについては、以下をご覧ください。
コードサンプル
C#
Firestore に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Firestore に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Firestore に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Firestore に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Firestore に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Ruby
Firestore に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 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 page demonstrates how to use Firestore watch listeners to monitor and observe changes in data within a Firestore database.\u003c/p\u003e\n"],["\u003cp\u003eThe provided code examples in C#, Go, Java, Node.js, Python, and Ruby showcase how to listen for added, modified, and removed documents in a collection.\u003c/p\u003e\n"],["\u003cp\u003eEach code sample filters a "cities" collection by the "state" field set to "CA", focusing on changes within this subset of data.\u003c/p\u003e\n"],["\u003cp\u003eSetting up Application Default Credentials is a prerequisite for authenticating to Firestore, as indicated in the instructions and documentation links.\u003c/p\u003e\n"],["\u003cp\u003eThe code samples provided in the documentation demonstrate the use of a listener function that is triggered whenever there are changes to a query, and each language showcases a slightly different syntax to achieve this.\u003c/p\u003e\n"]]],[],null,["# Observe change types with Firestore watch listeners\n\nExplore further\n---------------\n\n\nFor detailed documentation that includes this code sample, see the following:\n\n- [Get real-time updates](/firestore/native/docs/query-data/listen)\n- [Get realtime updates with Cloud Firestore](https://firebase.google.com/docs/firestore/query-data/listen)\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 CollectionReference citiesRef = db.Collection(\"cities\");\n Query query = db.Collection(\"cities\").WhereEqualTo(\"State\", \"CA\");\n\n FirestoreChangeListener listener = query.Listen(snapshot =\u003e\n {\n foreach (DocumentChange change in snapshot.Changes)\n {\n if (change.ChangeType.ToString() == \"Added\")\n {\n Console.WriteLine(\"New city: {0}\", change.Document.Id);\n }\n else if (change.ChangeType.ToString() == \"Modified\")\n {\n Console.WriteLine(\"Modified city: {0}\", change.Document.Id);\n }\n else if (change.ChangeType.ToString() == \"Removed\")\n {\n Console.WriteLine(\"Removed city: {0}\", change.Document.Id);\n }\n }\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 import (\n \t\"context\"\n \t\"fmt\"\n \t\"io\"\n \t\"time\"\n\n \t\"cloud.google.com/go/firestore\"\n \t\"google.golang.org/grpc/codes\"\n \t\"google.golang.org/grpc/status\"\n )\n\n // listenChanges listens to a query, returning the list of document changes.\n func listenChanges(ctx context.Context, w io.Writer, projectID, collection string) error {\n \t// projectID := \"project-id\"\n \tctx, cancel := context.WithTimeout(ctx, 30*time.Second)\n \tdefer cancel()\n\n \tclient, err := firestore.NewClient(ctx, projectID)\n \tif err != nil {\n \t\treturn fmt.Errorf(\"firestore.NewClient: %w\", err)\n \t}\n \tdefer client.Close()\n\n \tit := client.Collection(collection).https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_Query_Where(\"state\", \"==\", \"CA\").Snapshots(ctx)\n \tfor {\n \t\tsnap, err := it.Next()\n \t\t// DeadlineExceeded will be returned when ctx is cancelled.\n \t\tif status.Code(err) == codes.DeadlineExceeded {\n \t\t\treturn nil\n \t\t}\n \t\tif err != nil {\n \t\t\treturn fmt.Errorf(\"Snapshots.Next: %w\", err)\n \t\t}\n \t\tif snap != nil {\n \t\t\tfor _, change := range snap.Changes {\n \t\t\t\tswitch change.Kind {\n \t\t\t\tcase firestore.https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_DocumentAdded_DocumentRemoved_DocumentModified:\n \t\t\t\t\tfmt.Fprintf(w, \"New city: %v\\n\", change.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\t\t\tcase firestore.https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_DocumentAdded_DocumentRemoved_DocumentModified:\n \t\t\t\t\tfmt.Fprintf(w, \"Modified city: %v\\n\", change.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\t\t\tcase firestore.https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/index.html#cloud_google_com_go_firestore_DocumentAdded_DocumentRemoved_DocumentModified:\n \t\t\t\t\tfmt.Fprintf(w, \"Removed city: %v\\n\", change.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\t\t\t}\n \t\t\t}\n \t\t}\n \t}\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 db.collection(\"cities\")\n .whereEqualTo(\"state\", \"CA\")\n .addSnapshotListener(\n new EventListener\u003cQuerySnapshot\u003e() {\n @Override\n public void onEvent(\n @Nullable QuerySnapshot snapshots, @Nullable FirestoreException e) {\n if (e != null) {\n System.err.println(\"Listen failed: \" + e);\n return;\n }\n\n for (DocumentChange dc : snapshots.getDocumentChanges()) {\n switch (dc.getType()) {\n case ADDED:\n System.out.println(\"New city: \" + dc.getDocument().getData());\n break;\n case MODIFIED:\n System.out.println(\"Modified city: \" + dc.getDocument().getData());\n break;\n case REMOVED:\n System.out.println(\"Removed city: \" + dc.getDocument().getData());\n break;\n default:\n break;\n }\n }\n }\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 observer = db.collection('cities').where('state', '==', 'CA')\n .onSnapshot(querySnapshot =\u003e {\n querySnapshot.docChanges().forEach(change =\u003e {\n if (change.type === 'added') {\n console.log('New city: ', change.doc.data());\n }\n if (change.type === 'modified') {\n console.log('Modified city: ', change.doc.data());\n }\n if (change.type === 'removed') {\n console.log('Removed city: ', change.doc.data());\n }\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\n # Create an Event for notifying main thread.\n delete_done = threading.Event()\n\n # Create a callback on_snapshot function to capture changes\n def on_snapshot(col_snapshot, changes, read_time):\n print(\"Callback received query snapshot.\")\n print(\"Current cities in California: \")\n for change in changes:\n if change.type.name == \"ADDED\":\n print(f\"New city: {change.document.id}\")\n elif change.type.name == \"MODIFIED\":\n print(f\"Modified city: {change.document.id}\")\n elif change.type.name == \"REMOVED\":\n print(f\"Removed city: {change.document.id}\")\n delete_done.set()\n\n col_query = db.collection(\"cities\").where(filter=FieldFilter(\"state\", \"==\", \"CA\"))\n\n # Watch the collection query\n query_watch = col_query.on_snapshot(on_snapshot)\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 query = firestore.col(collection_path).where :state, :==, \"CA\"\n added = []\n modified = []\n removed = []\n\n # Watch the collection query.\n listener = query.listen do |snapshot|\n puts \"Callback received query snapshot.\"\n puts \"Current cities in California:\"\n snapshot.changes.each do |change|\n if change.added?\n puts \"New city: #{change.doc.document_id}\"\n added \u003c\u003c snapshot\n elsif change.modified?\n puts \"Modified city: #{change.doc.document_id}\"\n modified \u003c\u003c snapshot\n elsif change.removed?\n puts \"Removed city: #{change.doc.document_id}\"\n removed \u003c\u003c snapshot\n end\n end\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)."]]