Cloud Firestore にデータを追加する

このドキュメントでは、Cloud Firestore で個々のドキュメントを設定、追加、更新する方法について説明します。データを一括で書き込むには、トランザクションとバッチ書き込みをご覧ください。

概要

以下のいずれかの方法で、Cloud Firestore にデータを書き込むことができます。

  • ドキュメント識別子を明示的に指定し、コレクション内のドキュメントのデータを設定する。
  • コレクションに新しいドキュメントを追加する。この場合、Cloud Firestore はドキュメント識別子を自動的に生成します。
  • 自動的に生成された識別子を持つ空のドキュメントを作成し、データを割り当てる。

始める前に

Cloud Firestore を初期化してデータを設定、追加、更新する前に、次の手順を実施しておく必要があります。

Cloud Firestore を初期化する

Cloud Firestore のインスタンスを初期化します。

Web

import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";  // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = {     FIREBASE_CONFIGURATION };  // Initialize Firebase const app = initializeApp(firebaseConfig);   // Initialize Cloud Firestore and get a reference to the service const db = getFirestore(app); 

FIREBASE_CONFIGURATION は、ウェブアプリの firebaseConfig に置き換えます。

デバイスの接続が失われた場合にデータを維持する方法については、オフライン データの有効化をご覧ください。

Web

import firebase from "firebase/app"; import "firebase/firestore";  // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = {     FIREBASE_CONFIGURATION };  // Initialize Firebase firebase.initializeApp(firebaseConfig);   // Initialize Cloud Firestore and get a reference to the service const db = firebase.firestore(); 

FIREBASE_CONFIGURATION は、ウェブアプリの firebaseConfig に置き換えます。

デバイスの接続が失われた場合にデータを維持する方法については、オフライン データの有効化をご覧ください。

Swift
注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
import FirebaseCore import FirebaseFirestore
FirebaseApp.configure()  let db = Firestore.firestore()
Objective-C
注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
@import FirebaseCore; @import FirebaseFirestore;  // Use Firebase library to configure APIs [FIRApp configure];   
FIRFirestore *defaultFirestore = [FIRFirestore firestore];

Kotlin

// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore

Java

// Access a Cloud Firestore instance from your Activity
FirebaseFirestore db = FirebaseFirestore.getInstance();

Dart

db = FirebaseFirestore.instance;
Java
Cloud Firestore SDK を初期化する方法は環境に応じて異なります。最も一般的な方法を以下に示します。完全なリファレンスについては、Admin SDK の初期化をご覧ください。
  • Google Cloud で初期化する
    import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.firestore.Firestore;  import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions;  // Use the application default credentials GoogleCredentials credentials = GoogleCredentials.getApplicationDefault(); FirebaseOptions options = new FirebaseOptions.Builder()     .setCredentials(credentials)     .setProjectId(projectId)     .build(); FirebaseApp.initializeApp(options);  Firestore db = FirestoreClient.getFirestore();
  • 各自のサーバーで初期化する

    各自のサーバーで Firebase Admin SDK を使用するには、サービス アカウントを使用します。

    Google Cloud コンソールで [IAM と管理] > [サービス アカウント] にアクセスします。新しい秘密鍵を生成し、JSON ファイルを保存します。次に、このファイルを使用して SDK を初期化します。

    import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.firestore.Firestore;  import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions;  // Use a service account InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json"); GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount); FirebaseOptions options = new FirebaseOptions.Builder()     .setCredentials(credentials)     .build(); FirebaseApp.initializeApp(options);  Firestore db = FirestoreClient.getFirestore();
  • Python
    Cloud Firestore SDK を初期化する方法は環境に応じて異なります。最も一般的な方法を以下に示します。完全なリファレンスについては、Admin SDK の初期化をご覧ください。
  • Google Cloud で初期化する
    import firebase_admin from firebase_admin import firestore  # Application Default credentials are automatically created. app = firebase_admin.initialize_app() db = firestore.client()

    既存のアプリケーションのデフォルト認証情報も SDK を初期化する際に使用できます。

    import firebase_admin from firebase_admin import credentials from firebase_admin import firestore  # Use the application default credentials. cred = credentials.ApplicationDefault()  firebase_admin.initialize_app(cred) db = firestore.client()
  • 各自のサーバーで初期化する

    各自のサーバーで Firebase Admin SDK を使用するには、サービス アカウントを使用します。

    Google Cloud コンソールで [IAM と管理] > [サービス アカウント] にアクセスします。新しい秘密鍵を生成し、JSON ファイルを保存します。次に、このファイルを使用して SDK を初期化します。

    import firebase_admin from firebase_admin import credentials from firebase_admin import firestore  # Use a service account. cred = credentials.Certificate('path/to/serviceAccount.json')  app = firebase_admin.initialize_app(cred)  db = firestore.client()
  • Python

    Cloud Firestore SDK を初期化する方法は環境に応じて異なります。最も一般的な方法を以下に示します。完全なリファレンスについては、Admin SDK の初期化をご覧ください。
  • Google Cloud で初期化する
    import firebase_admin from firebase_admin import firestore_async  # Application Default credentials are automatically created. app = firebase_admin.initialize_app() db = firestore_async.client()

    既存のアプリケーションのデフォルト認証情報も SDK を初期化する際に使用できます。

    import firebase_admin from firebase_admin import credentials from firebase_admin import firestore_async  # Use the application default credentials. cred = credentials.ApplicationDefault()  firebase_admin.initialize_app(cred) db = firestore_async.client()
  • 各自のサーバーで初期化する

    各自のサーバーで Firebase Admin SDK を使用するには、サービス アカウントを使用します。

    Google Cloud コンソールで [IAM と管理] > [サービス アカウント] にアクセスします。新しい秘密鍵を生成し、JSON ファイルを保存します。次に、このファイルを使用して SDK を初期化します。

    import firebase_admin from firebase_admin import credentials from firebase_admin import firestore_async  # Use a service account. cred = credentials.Certificate('path/to/serviceAccount.json')  app = firebase_admin.initialize_app(cred)  db = firestore_async.client()
  • C++
    // Make sure the call to `Create()` happens some time before you call Firestore::GetInstance(). App::Create(); Firestore* db = Firestore::GetInstance();
    Node.js
    Cloud Firestore SDK を初期化する方法は環境に応じて異なります。最も一般的な方法を以下に示します。完全なリファレンスについては、Admin SDK の初期化をご覧ください。
    • Cloud Functions で初期化する
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app'); const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp();  const db = getFirestore(); 
    • Google Cloud で初期化する
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app'); const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp({   credential: applicationDefault() });  const db = getFirestore();
    • 各自のサーバーで初期化する

      各自のサーバー(またはその他の Node.js 環境)で Firebase Admin SDK を使用するには、サービス アカウントを使用します。Google Cloud コンソールで [IAM と管理] > [サービス アカウント] にアクセスします。新しい秘密鍵を生成し、JSON ファイルを保存します。次に、このファイルを使用して SDK を初期化します。

      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app'); const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      const serviceAccount = require('./path/to/serviceAccountKey.json');  initializeApp({   credential: cert(serviceAccount) });  const db = getFirestore(); 
    Go
    Cloud Firestore SDK を初期化する方法は環境に応じて異なります。最も一般的な方法を以下に示します。完全なリファレンスについては、Admin SDK の初期化をご覧ください。
  • Google Cloud で初期化する
    import (   "log"    firebase "firebase.google.com/go"   "google.golang.org/api/option" )  // Use the application default credentials ctx := context.Background() conf := &firebase.Config{ProjectID: projectID} app, err := firebase.NewApp(ctx, conf) if err != nil {   log.Fatalln(err) }  client, err := app.Firestore(ctx) if err != nil {   log.Fatalln(err) } defer client.Close()
  • 各自のサーバーで初期化する

    各自のサーバーで Firebase Admin SDK を使用するには、サービス アカウントを使用します。

    Google Cloud コンソールで [IAM と管理] > [サービス アカウント] にアクセスします。新しい秘密鍵を生成し、JSON ファイルを保存します。次に、このファイルを使用して SDK を初期化します。

    import (   "log"    firebase "firebase.google.com/go"   "google.golang.org/api/option" )  // Use a service account ctx := context.Background() sa := option.WithCredentialsFile("path/to/serviceAccount.json") app, err := firebase.NewApp(ctx, nil, sa) if err != nil {   log.Fatalln(err) }  client, err := app.Firestore(ctx) if err != nil {   log.Fatalln(err) } defer client.Close()
  • PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    use Google\Cloud\Firestore\FirestoreClient;  /**  * Initialize Cloud Firestore with default project ID.  */ function setup_client_create(string $projectId = null) {     // Create the Cloud Firestore client     if (empty($projectId)) {         // The `projectId` parameter is optional and represents which project the         // client will act on behalf of. If not supplied, the client falls back to         // the default project inferred from the environment.         $db = new FirestoreClient();         printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);     } else {         $db = new FirestoreClient([             'projectId' => $projectId,         ]);         printf('Created Cloud Firestore client with project ID: %s' . PHP_EOL, $projectId);     } }
    Unity
    using Firebase.Firestore; using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    C#

    C#

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    FirestoreDb db = FirestoreDb.Create(project); Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Ruby
    require "google/cloud/firestore"  # The `project_id` parameter is optional and represents which project the # client will act on behalf of. If not supplied, the client falls back to the # default project inferred from the environment. firestore = Google::Cloud::Firestore.new project_id: project_id  puts "Created Cloud Firestore client with given project ID."

    ドキュメントを設定する

    単一のドキュメントを作成または上書きするには、言語固有の次の set() メソッドを使用します。

    Web

    setDoc() メソッドを使用します。

    import { doc, setDoc } from "firebase/firestore";   // Add a new document in collection "cities" await setDoc(doc(db, "cities", "LA"), {   name: "Los Angeles",   state: "CA",   country: "USA" });

    Web

    set() メソッドを使用します。

    // Add a new document in collection "cities" db.collection("cities").doc("LA").set({     name: "Los Angeles",     state: "CA",     country: "USA" }) .then(() => {     console.log("Document successfully written!"); }) .catch((error) => {     console.error("Error writing document: ", error); });
    Swift

    setData() メソッドを使用します。

    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Add a new document in collection "cities" do {   try await db.collection("cities").document("LA").setData([     "name": "Los Angeles",     "state": "CA",     "country": "USA"   ])   print("Document successfully written!") } catch {   print("Error writing document: \(error)") }
    Objective-C

    setData: メソッドを使用します。

    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Add a new document in collection "cities" [[[self.db collectionWithPath:@"cities"] documentWithPath:@"LA"] setData:@{   @"name": @"Los Angeles",   @"state": @"CA",   @"country": @"USA" } completion:^(NSError * _Nullable error) {   if (error != nil) {     NSLog(@"Error writing document: %@", error);   } else {     NSLog(@"Document successfully written!");   } }];

    Kotlin

    set() メソッドを使用します。

    val city = hashMapOf(     "name" to "Los Angeles",     "state" to "CA",     "country" to "USA", )  db.collection("cities").document("LA")     .set(city)     .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully written!") }     .addOnFailureListener { e -> Log.w(TAG, "Error writing document", e) }

    Java

    set() メソッドを使用します。

    Map<String, Object> city = new HashMap<>(); city.put("name", "Los Angeles"); city.put("state", "CA"); city.put("country", "USA");  db.collection("cities").document("LA")         .set(city)         .addOnSuccessListener(new OnSuccessListener<Void>() {             @Override             public void onSuccess(Void aVoid) {                 Log.d(TAG, "DocumentSnapshot successfully written!");             }         })         .addOnFailureListener(new OnFailureListener() {             @Override             public void onFailure(@NonNull Exception e) {                 Log.w(TAG, "Error writing document", e);             }         });

    Dart

    set() メソッドを使用します。

    final city = <String, String>{   "name": "Los Angeles",   "state": "CA",   "country": "USA" };  db     .collection("cities")     .doc("LA")     .set(city)     .onError((e, _) => print("Error writing document: $e"));
    Java

    set() メソッドを使用します。

    // Create a Map to store the data we want to set Map<String, Object> docData = new HashMap<>(); docData.put("name", "Los Angeles"); docData.put("state", "CA"); docData.put("country", "USA"); docData.put("regions", Arrays.asList("west_coast", "socal")); // Add a new document (asynchronously) in collection "cities" with id "LA" ApiFuture<WriteResult> future = db.collection("cities").document("LA").set(docData); // ... // future.get() blocks on response System.out.println("Update time : " + future.get().getUpdateTime());
    Python

    set() メソッドを使用します。

    data = {"name": "Los Angeles", "state": "CA", "country": "USA"}  # Add a new doc in collection 'cities' with ID 'LA' db.collection("cities").document("LA").set(data)

    Python

    set() メソッドを使用します。

    data = {"name": "Los Angeles", "state": "CA", "country": "USA"}  # Add a new doc in collection 'cities' with ID 'LA' await db.collection("cities").document("LA").set(data)
    C++

    Set() メソッドを使用します。

    // Add a new document in collection 'cities' db->Collection("cities")     .Document("LA")     .Set({{"name", FieldValue::String("Los Angeles")},           {"state", FieldValue::String("CA")},           {"country", FieldValue::String("USA")}})     .OnCompletion([](const Future<void>& future) {       if (future.error() == Error::kErrorOk) {         std::cout << "DocumentSnapshot successfully written!" << std::endl;       } else {         std::cout << "Error writing document: " << future.error_message()                   << std::endl;       }     });
    Node.js

    set() メソッドを使用します。

    const data = {   name: 'Los Angeles',   state: 'CA',   country: 'USA' };  // Add a new document in collection "cities" with ID 'LA' const res = await db.collection('cities').doc('LA').set(data);
    Go

    Set() メソッドを使用します。

     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func addDocAsMap(ctx context.Context, client *firestore.Client) error { 	_, err := client.Collection("cities").Doc("LA").Set(ctx, map[string]interface{}{ 		"name":    "Los Angeles", 		"state":   "CA", 		"country": "USA", 	}) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    set() メソッドを使用します。

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $data = [     'name' => 'Los Angeles',     'state' => 'CA',     'country' => 'USA' ]; $db->collection('samples/php/cities')->document('LA')->set($data);
    Unity

    SetAsync() メソッドを使用します。

    DocumentReference docRef = db.Collection("cities").Document("LA"); Dictionary<string, object> city = new Dictionary<string, object> { 	{ "Name", "Los Angeles" }, 	{ "State", "CA" }, 	{ "Country", "USA" } }; docRef.SetAsync(city).ContinueWithOnMainThread(task => { 	Debug.Log("Added data to the LA document in the cities collection."); });
    C#

    SetAsync() メソッドを使用します。

    DocumentReference docRef = db.Collection("cities").Document("LA"); Dictionary<string, object> city = new Dictionary<string, object> {     { "name", "Los Angeles" },     { "state", "CA" },     { "country", "USA" } }; await docRef.SetAsync(city);
    Ruby

    set() メソッドを使用します。

    city_ref = firestore.doc "#{collection_path}/LA"  data = {   name:    "Los Angeles",   state:   "CA",   country: "USA" }  city_ref.set data

    ドキュメントが存在しない場合は、ドキュメントが新規に作成されます。ドキュメントが存在する場合、次のように既存のドキュメントにデータを統合するように指定しない限り、新しく提供されたデータでコンテンツが上書きされます。

    Web

    import { doc, setDoc } from "firebase/firestore";   const cityRef = doc(db, 'cities', 'BJ'); setDoc(cityRef, { capital: true }, { merge: true });

    Web

    var cityRef = db.collection('cities').doc('BJ');  var setWithMerge = cityRef.set({     capital: true }, { merge: true });
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Update one field, creating the document if it does not exist. db.collection("cities").document("BJ").setData([ "capital": true ], merge: true)
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Write to the document reference, merging data with existing // if the document already exists [[[self.db collectionWithPath:@"cities"] documentWithPath:@"BJ"]      setData:@{ @"capital": @YES }      merge:YES      completion:^(NSError * _Nullable error) {        // ...      }];

    Kotlin

    // Update one field, creating the document if it does not already exist. val data = hashMapOf("capital" to true)  db.collection("cities").document("BJ")     .set(data, SetOptions.merge())

    Java

    // Update one field, creating the document if it does not already exist. Map<String, Object> data = new HashMap<>(); data.put("capital", true);  db.collection("cities").document("BJ")         .set(data, SetOptions.merge());

    Dart

    // Update one field, creating the document if it does not already exist. final data = {"capital": true};  db.collection("cities").doc("BJ").set(data, SetOptions(merge: true));
    Java
    // asynchronously update doc, create the document if missing Map<String, Object> update = new HashMap<>(); update.put("capital", true);  ApiFuture<WriteResult> writeResult =     db.collection("cities").document("BJ").set(update, SetOptions.merge()); // ... System.out.println("Update time : " + writeResult.get().getUpdateTime());
    Python
    city_ref = db.collection("cities").document("BJ")  city_ref.set({"capital": True}, merge=True)

    Python

    city_ref = db.collection("cities").document("BJ")  await city_ref.set({"capital": True}, merge=True)
    C++
    db->Collection("cities").Document("BJ").Set(     {{"capital", FieldValue::Boolean(true)}}, SetOptions::Merge());
    Node.js
    const cityRef = db.collection('cities').doc('BJ');  const res = await cityRef.set({   capital: true }, { merge: true });
    Go
     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func updateDocCreateIfMissing(ctx context.Context, client *firestore.Client) error { 	_, err := client.Collection("cities").Doc("BJ").Set(ctx, map[string]interface{}{ 		"capital": true, 	}, firestore.MergeAll)  	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $cityRef = $db->collection('samples/php/cities')->document('BJ'); $cityRef->set([     'capital' => true ], ['merge' => true]);
    Unity
    DocumentReference docRef = db.Collection("cities").Document("LA"); Dictionary<string, object> update = new Dictionary<string, object> { 	{ "capital", false } }; docRef.SetAsync(update, SetOptions.MergeAll);
    C#
    DocumentReference docRef = db.Collection("cities").Document("LA"); Dictionary<string, object> update = new Dictionary<string, object> {     { "capital", false } }; await docRef.SetAsync(update, SetOptions.MergeAll);
    Ruby
    city_ref = firestore.doc "#{collection_path}/LA" city_ref.set({ capital: false }, merge: true)

    ドキュメントが存在するかどうかわからない場合は、新しいデータを既存のドキュメントに統合するオプションを渡し、ドキュメント全体が上書きされないようにします。マップを含むドキュメントの場合、空のマップが格納されたフィールドを含むセットを指定すると、ターゲット ドキュメントのマップ フィールドが上書きされます。

    データ型

    Cloud Firestore では、文字列、ブール値、数値、日付、NULL、ネストされた配列、オブジェクトなど、さまざまなデータ型をドキュメントに書き込むことができます。Cloud Firestore は、コードで使用する数字の種類に関係なく、数値を常に倍精度として保存します。

    Web

    import { doc, setDoc, Timestamp } from "firebase/firestore";   const docData = {     stringExample: "Hello world!",     booleanExample: true,     numberExample: 3.14159265,     dateExample: Timestamp.fromDate(new Date("December 10, 1815")),     arrayExample: [5, true, "hello"],     nullExample: null,     objectExample: {         a: 5,         b: {             nested: "foo"         }     } }; await setDoc(doc(db, "data", "one"), docData);

    Web

    var docData = {     stringExample: "Hello world!",     booleanExample: true,     numberExample: 3.14159265,     dateExample: firebase.firestore.Timestamp.fromDate(new Date("December 10, 1815")),     arrayExample: [5, true, "hello"],     nullExample: null,     objectExample: {         a: 5,         b: {             nested: "foo"         }     } }; db.collection("data").doc("one").set(docData).then(() => {     console.log("Document successfully written!"); });
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    let docData: [String: Any] = [   "stringExample": "Hello world!",   "booleanExample": true,   "numberExample": 3.14159265,   "dateExample": Timestamp(date: Date()),   "arrayExample": [5, true, "hello"],   "nullExample": NSNull(),   "objectExample": [     "a": 5,     "b": [       "nested": "foo"     ]   ] ] do {   try await db.collection("data").document("one").setData(docData)   print("Document successfully written!") } catch {   print("Error writing document: \(error)") }
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    NSDictionary *docData = @{   @"stringExample": @"Hello world!",   @"booleanExample": @YES,   @"numberExample": @3.14,   @"dateExample": [FIRTimestamp timestampWithDate:[NSDate date]],   @"arrayExample": @[@5, @YES, @"hello"],   @"nullExample": [NSNull null],   @"objectExample": @{     @"a": @5,     @"b": @{       @"nested": @"foo"     }   } };  [[[self.db collectionWithPath:@"data"] documentWithPath:@"one"] setData:docData     completion:^(NSError * _Nullable error) {       if (error != nil) {         NSLog(@"Error writing document: %@", error);       } else {         NSLog(@"Document successfully written!");       }     }];

    Kotlin

    val docData = hashMapOf(     "stringExample" to "Hello world!",     "booleanExample" to true,     "numberExample" to 3.14159265,     "dateExample" to Timestamp(Date()),     "listExample" to arrayListOf(1, 2, 3),     "nullExample" to null, )  val nestedData = hashMapOf(     "a" to 5,     "b" to true, )  docData["objectExample"] = nestedData  db.collection("data").document("one")     .set(docData)     .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully written!") }     .addOnFailureListener { e -> Log.w(TAG, "Error writing document", e) }

    Java

    Map<String, Object> docData = new HashMap<>(); docData.put("stringExample", "Hello world!"); docData.put("booleanExample", true); docData.put("numberExample", 3.14159265); docData.put("dateExample", new Timestamp(new Date())); docData.put("listExample", Arrays.asList(1, 2, 3)); docData.put("nullExample", null);  Map<String, Object> nestedData = new HashMap<>(); nestedData.put("a", 5); nestedData.put("b", true);  docData.put("objectExample", nestedData);  db.collection("data").document("one")         .set(docData)         .addOnSuccessListener(new OnSuccessListener<Void>() {             @Override             public void onSuccess(Void aVoid) {                 Log.d(TAG, "DocumentSnapshot successfully written!");             }         })         .addOnFailureListener(new OnFailureListener() {             @Override             public void onFailure(@NonNull Exception e) {                 Log.w(TAG, "Error writing document", e);             }         });

    Dart

    final docData = {   "stringExample": "Hello world!",   "booleanExample": true,   "numberExample": 3.14159265,   "dateExample": Timestamp.now(),   "listExample": [1, 2, 3],   "nullExample": null };  final nestedData = {   "a": 5,   "b": true, };  docData["objectExample"] = nestedData;  db     .collection("data")     .doc("one")     .set(docData)     .onError((e, _) => print("Error writing document: $e"));
    Java
    Map<String, Object> docData = new HashMap<>(); docData.put("stringExample", "Hello, World"); docData.put("booleanExample", false); docData.put("numberExample", 3.14159265); docData.put("nullExample", null);  ArrayList<Object> arrayExample = new ArrayList<>(); Collections.addAll(arrayExample, 5L, true, "hello"); docData.put("arrayExample", arrayExample);  Map<String, Object> objectExample = new HashMap<>(); objectExample.put("a", 5L); objectExample.put("b", true);  docData.put("objectExample", objectExample);  ApiFuture<WriteResult> future = db.collection("data").document("one").set(docData); System.out.println("Update time : " + future.get().getUpdateTime());
    Python
    data = {     "stringExample": "Hello, World!",     "booleanExample": True,     "numberExample": 3.14159265,     "dateExample": datetime.datetime.now(tz=datetime.timezone.utc),     "arrayExample": [5, True, "hello"],     "nullExample": None,     "objectExample": {"a": 5, "b": True}, }  db.collection("data").document("one").set(data)

    Python

    data = {     "stringExample": "Hello, World!",     "booleanExample": True,     "numberExample": 3.14159265,     "dateExample": datetime.datetime.now(tz=datetime.timezone.utc),     "arrayExample": [5, True, "hello"],     "nullExample": None,     "objectExample": {"a": 5, "b": True}, }  await db.collection("data").document("one").set(data)
    C++
    MapFieldValue doc_data{     {"stringExample", FieldValue::String("Hello world!")},     {"booleanExample", FieldValue::Boolean(true)},     {"numberExample", FieldValue::Double(3.14159265)},     {"dateExample", FieldValue::Timestamp(Timestamp::Now())},     {"arrayExample", FieldValue::Array({FieldValue::Integer(1),                                         FieldValue::Integer(2),                                         FieldValue::Integer(3)})},     {"nullExample", FieldValue::Null()},     {"objectExample",      FieldValue::Map(          {{"a", FieldValue::Integer(5)},           {"b", FieldValue::Map(                     {{"nested", FieldValue::String("foo")}})}})}, };  db->Collection("data").Document("one").Set(doc_data).OnCompletion(     [](const Future<void>& future) {       if (future.error() == Error::kErrorOk) {         std::cout << "DocumentSnapshot successfully written!" << std::endl;       } else {         std::cout << "Error writing document: " << future.error_message()                   << std::endl;       }     });
    Node.js
    const data = {   stringExample: 'Hello, World!',   booleanExample: true,   numberExample: 3.14159265,   dateExample: Timestamp.fromDate(new Date('December 10, 1815')),   arrayExample: [5, true, 'hello'],   nullExample: null,   objectExample: {     a: 5,     b: true   } };  const res = await db.collection('data').doc('one').set(data);
    Go
     import ( 	"context" 	"log" 	"time"  	"cloud.google.com/go/firestore" )  func addDocDataTypes(ctx context.Context, client *firestore.Client) error { 	doc := make(map[string]interface{}) 	doc["stringExample"] = "Hello world!" 	doc["booleanExample"] = true 	doc["numberExample"] = 3.14159265 	doc["dateExample"] = time.Now() 	doc["arrayExample"] = []interface{}{5, true, "hello"} 	doc["nullExample"] = nil 	doc["objectExample"] = map[string]interface{}{ 		"a": 5, 		"b": true, 	}  	_, err := client.Collection("data").Doc("one").Set(ctx, doc) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $data = [     'stringExample' => 'Hello World',     'booleanExample' => true,     'numberExample' => 3.14159265,     'dateExample' => new Timestamp(new DateTime()),     'arrayExample' => array(5, true, 'hello'),     'nullExample' => null,     'objectExample' => ['a' => 5, 'b' => true],     'documentReferenceExample' => $db->collection('samples/php/data')->document('two'), ]; $db->collection('samples/php/data')->document('one')->set($data); printf('Set multiple data-type data for the one document in the data collection.' . PHP_EOL);
    Unity
    DocumentReference docRef = db.Collection("data").Document("one"); Dictionary<string, object> docData = new Dictionary<string, object> { 	{ "stringExample", "Hello World" }, 	{ "booleanExample", false }, 	{ "numberExample", 3.14159265 }, 	{ "nullExample", null }, 	{ "arrayExample", new List<object>() { 5, true, "Hello" } }, 	{ "objectExample", new Dictionary<string, object> 		{ 			{ "a", 5 }, 			{ "b", true }, 		} 	}, };  docRef.SetAsync(docData);
    C#
    DocumentReference docRef = db.Collection("data").Document("one"); Dictionary<string, object> docData = new Dictionary<string, object> {     { "stringExample", "Hello World" },     { "booleanExample", false },     { "numberExample", 3.14159265 },     { "nullExample", null },     { "arrayExample", new object[] { 5, true, "Hello" } },     { "objectExample", new Dictionary<string, object>         {             { "a", 5 },             { "b", true},         }     } };  await docRef.SetAsync(docData);
    Ruby
    doc_ref = firestore.doc "#{collection_path}/one"  data = {   stringExample:  "Hello, World!",   booleanExample: true,   numberExample:  3.14159265,   dateExample:    DateTime.now,   arrayExample:   [5, true, "hello"],   nullExample:    nil,   objectExample:  {     a: 5,     b: true   } }  doc_ref.set data

    カスタム オブジェクト

    ドキュメントの表現に Map オブジェクトや Dictionary オブジェクトを使用すると不便なことが多いため、Cloud Firestore では、カスタムクラスを使ったドキュメント作成をサポートしています。Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。

    カスタムクラスを使用すると、最初の例を次のように書き直すことが可能です。

    Web

    class City {     constructor (name, state, country ) {         this.name = name;         this.state = state;         this.country = country;     }     toString() {         return this.name + ', ' + this.state + ', ' + this.country;     } }  // Firestore data converter const cityConverter = {     toFirestore: (city) => {         return {             name: city.name,             state: city.state,             country: city.country             };     },     fromFirestore: (snapshot, options) => {         const data = snapshot.data(options);         return new City(data.name, data.state, data.country);     } };

    Web

    class City {     constructor (name, state, country ) {         this.name = name;         this.state = state;         this.country = country;     }     toString() {         return this.name + ', ' + this.state + ', ' + this.country;     } }  // Firestore data converter var cityConverter = {     toFirestore: function(city) {         return {             name: city.name,             state: city.state,             country: city.country             };     },     fromFirestore: function(snapshot, options){         const data = snapshot.data(options);         return new City(data.name, data.state, data.country);     } };
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    public struct City: Codable {    let name: String   let state: String?   let country: String?   let isCapital: Bool?   let population: Int64?    enum CodingKeys: String, CodingKey {     case name     case state     case country     case isCapital = "capital"     case population   }  }
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // This isn't supported in Objective-C.   

    Kotlin

    data class City(     val name: String? = null,     val state: String? = null,     val country: String? = null,     @field:JvmField // use this annotation if your Boolean field is prefixed with 'is'     val isCapital: Boolean? = null,     val population: Long? = null,     val regions: List<String>? = null, )

    Java

    カスタムクラスごとに、引数を指定しないパブリック コンストラクタが必要です。また、クラスには各プロパティの public getter が含まれている必要があります。

    public class City {       private String name;     private String state;     private String country;     private boolean capital;     private long population;     private List<String> regions;      public City() {}      public City(String name, String state, String country, boolean capital, long population, List<String> regions) {         // ...     }      public String getName() {         return name;     }      public String getState() {         return state;     }      public String getCountry() {         return country;     }      public boolean isCapital() {         return capital;     }      public long getPopulation() {         return population;     }      public List<String> getRegions() {         return regions;     }  }

    Dart

    class City {   final String? name;   final String? state;   final String? country;   final bool? capital;   final int? population;   final List<String>? regions;    City({     this.name,     this.state,     this.country,     this.capital,     this.population,     this.regions,   });    factory City.fromFirestore(     DocumentSnapshot<Map<String, dynamic>> snapshot,     SnapshotOptions? options,   ) {     final data = snapshot.data();     return City(       name: data?['name'],       state: data?['state'],       country: data?['country'],       capital: data?['capital'],       population: data?['population'],       regions:           data?['regions'] is Iterable ? List.from(data?['regions']) : null,     );   }    Map<String, dynamic> toFirestore() {     return {       if (name != null) "name": name,       if (state != null) "state": state,       if (country != null) "country": country,       if (capital != null) "capital": capital,       if (population != null) "population": population,       if (regions != null) "regions": regions,     };   } }
    Java
    public City() {   // Must have a public no-argument constructor }  // Initialize all fields of a city public City(     String name,     String state,     String country,     Boolean capital,     Long population,     List<String> regions) {   this.name = name;   this.state = state;   this.country = country;   this.capital = capital;   this.population = population;   this.regions = regions; } 
    Python
    class City:     def __init__(self, name, state, country, capital=False, population=0, regions=[]):         self.name = name         self.state = state         self.country = country         self.capital = capital         self.population = population         self.regions = regions      @staticmethod     def from_dict(source):         # ...      def to_dict(self):         # ...      def __repr__(self):         return f"City(\                 name={self.name}, \                 country={self.country}, \                 population={self.population}, \                 capital={self.capital}, \                 regions={self.regions}\             )"  

    Python

    class City:     def __init__(self, name, state, country, capital=False, population=0, regions=[]):         self.name = name         self.state = state         self.country = country         self.capital = capital         self.population = population         self.regions = regions      @staticmethod     def from_dict(source):         # ...      def to_dict(self):         # ...      def __repr__(self):         return f"City(\                 name={self.name}, \                 country={self.country}, \                 population={self.population}, \                 capital={self.capital}, \                 regions={self.regions}\             )"  
    C++
    // This is not yet supported.
    Node.js
    // Node.js uses JavaScript objects
    Go
     // City represents a city. type City struct { 	Name       string   `firestore:"name,omitempty"` 	State      string   `firestore:"state,omitempty"` 	Country    string   `firestore:"country,omitempty"` 	Capital    bool     `firestore:"capital,omitempty"` 	Population int64    `firestore:"population,omitempty"` 	Density    int64    `firestore:"density,omitempty"` 	Regions    []string `firestore:"regions,omitempty"` } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    class City {     /** @var string */     public $name;     /** @var string */     public $state;     /** @var string */     public $country;     /** @var bool */     public $capital;     /** @var int */     public $population;     /** @var array<string> */     public $regions;      /**      * @param array<string> $regions      */     public function __construct(         string $name,         string $state,         string $country,         bool $capital = false,         int $population = 0,         array $regions = []     ) {         $this->name = $name;         $this->state = $state;         $this->country = $country;         $this->capital = $capital;         $this->population = $population;         $this->regions = $regions;     }      /**      * @param array<mixed> $source      */     public static function fromArray(array $source): City     {         // implementation of fromArray is excluded for brevity         # ...     }      /**      * @return array<mixed>      */     public function toArray(): array     {         // implementation of toArray is excluded for brevity         # ...     }      public function __toString()     {         // implementation of __toString is excluded for brevity         # ...     } } 
    Unity
    [FirestoreData] public class City { 	[FirestoreProperty] 	public string Name { get; set; }  	[FirestoreProperty] 	public string State { get; set; }  	[FirestoreProperty] 	public string Country { get; set; }  	[FirestoreProperty] 	public bool Capital { get; set; }  	[FirestoreProperty] 	public long Population { get; set; } }
    C#
    [FirestoreData] public class City {     [FirestoreProperty]     public string Name { get; set; }      [FirestoreProperty]     public string State { get; set; }      [FirestoreProperty]     public string Country { get; set; }      [FirestoreProperty]     public bool Capital { get; set; }      [FirestoreProperty]     public long Population { get; set; } }
    Ruby
    // This isn't supported in Ruby

    Web

    import { doc, setDoc } from "firebase/firestore";   // Set with cityConverter const ref = doc(db, "cities", "LA").withConverter(cityConverter); await setDoc(ref, new City("Los Angeles", "CA", "USA"));

    Web

    // Set with cityConverter db.collection("cities").doc("LA")   .withConverter(cityConverter)   .set(new City("Los Angeles", "CA", "USA"));
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    let city = City(name: "Los Angeles",                 state: "CA",                 country: "USA",                 isCapital: false,                 population: 5000000)  do {   try db.collection("cities").document("LA").setData(from: city) } catch let error {   print("Error writing city to Firestore: \(error)") }
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // This isn't supported in Objective-C.   

    Kotlin

    val city = City(     "Los Angeles",     "CA",     "USA",     false,     5000000L,     listOf("west_coast", "socal"), ) db.collection("cities").document("LA").set(city)

    Java

    City city = new City("Los Angeles", "CA", "USA",         false, 5000000L, Arrays.asList("west_coast", "sorcal")); db.collection("cities").document("LA").set(city);

    Dart

    final city = City(   name: "Los Angeles",   state: "CA",   country: "USA",   capital: false,   population: 5000000,   regions: ["west_coast", "socal"], ); final docRef = db     .collection("cities")     .withConverter(       fromFirestore: City.fromFirestore,       toFirestore: (City city, options) => city.toFirestore(),     )     .doc("LA"); await docRef.set(city);
    Java
    City city =     new City("Los Angeles", "CA", "USA", false, 3900000L, Arrays.asList("west_coast", "socal")); ApiFuture<WriteResult> future = db.collection("cities").document("LA").set(city); // block on response if required System.out.println("Update time : " + future.get().getUpdateTime());
    Python
    city = City(name="Los Angeles", state="CA", country="USA") db.collection("cities").document("LA").set(city.to_dict())

    Python

    city = City(name="Los Angeles", state="CA", country="USA") await db.collection("cities").document("LA").set(city.to_dict())
    C++
    // This is not yet supported.
    Node.js
    // Node.js uses JavaScript objects
    Go
     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func addDocAsEntity(ctx context.Context, client *firestore.Client) error { 	city := City{ 		Name:    "Los Angeles", 		Country: "USA", 	} 	_, err := client.Collection("cities").Doc("LA").Set(ctx, city) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP
    // This isn't supported in PHP.
    Unity
    DocumentReference docRef = db.Collection("cities").Document("LA"); City city = new City { 	Name = "Los Angeles", 	State = "CA", 	Country = "USA", 	Capital = false, 	Population = 3900000L }; docRef.SetAsync(city);
    C#
    DocumentReference docRef = db.Collection("cities").Document("LA"); City city = new City {     Name = "Los Angeles",     State = "CA",     Country = "USA",     Capital = false,     Population = 3900000L }; await docRef.SetAsync(city);
    Ruby
    // This isn't supported in Ruby.

    ドキュメントの追加

    次の例に示すように、set() を使用してドキュメントを作成する場合は、作成するドキュメントの ID を指定する必要があります。

    Web

    import { doc, setDoc } from "firebase/firestore";   await setDoc(doc(db, "cities", "new-city-id"), data);

    Web

    db.collection("cities").doc("new-city-id").set(data);
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    db.collection("cities").document("new-city-id").setData(data)
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    [[[self.db collectionWithPath:@"cities"] documentWithPath:@"new-city-id"]     setData:data];

    Kotlin

    db.collection("cities").document("new-city-id").set(data)

    Java

    db.collection("cities").document("new-city-id").set(data);

    Dart

    db.collection("cities").doc("new-city-id").set({"name": "Chicago"});
    Java
    db.collection("cities").document("new-city-id").set(data);
    Python
    db.collection("cities").document("new-city-id").set(data)

    Python

    await db.collection("cities").document("new-city-id").set(data)
    C++
    db->Collection("cities").Document("SF").Set({/*some data*/});
    Node.js
    await db.collection('cities').doc('new-city-id').set(data);
    Go
     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func addDocWithID(ctx context.Context, client *firestore.Client) error { 	var data = make(map[string]interface{})  	_, err := client.Collection("cities").Doc("new-city-id").Set(ctx, data) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $db->collection('samples/php/cities')->document('new-city-id')->set($data);
    Unity
    db.Collection("cities").Document("new-city-id").SetAsync(city);
    C#
    await db.Collection("cities").Document("new-city-id").SetAsync(city);
    Ruby
    city_ref = firestore.doc "#{collection_path}/new-city-id" city_ref.set data

    ドキュメントに適切な ID が設定されていない場合は、Cloud Firestore によって ID が自動的に生成されます。次に示す言語固有の add() メソッドを呼び出します。

    Web

    addDoc() メソッドを使用します。

    import { collection, addDoc } from "firebase/firestore";   // Add a new document with a generated id. const docRef = await addDoc(collection(db, "cities"), {   name: "Tokyo",   country: "Japan" }); console.log("Document written with ID: ", docRef.id);

    Web

    add() メソッドを使用します。

    // Add a new document with a generated id. db.collection("cities").add({     name: "Tokyo",     country: "Japan" }) .then((docRef) => {     console.log("Document written with ID: ", docRef.id); }) .catch((error) => {     console.error("Error adding document: ", error); });
    Swift

    addDocument() メソッドを使用します。

    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Add a new document with a generated id. do {   let ref = try await db.collection("cities").addDocument(data: [     "name": "Tokyo",     "country": "Japan"   ])   print("Document added with ID: \(ref.documentID)") } catch {   print("Error adding document: \(error)") }
    Objective-C

    addDocumentWithData: メソッドを使用します。

    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Add a new document with a generated id. __block FIRDocumentReference *ref =     [[self.db collectionWithPath:@"cities"] addDocumentWithData:@{       @"name": @"Tokyo",       @"country": @"Japan"     } completion:^(NSError * _Nullable error) {       if (error != nil) {         NSLog(@"Error adding document: %@", error);       } else {         NSLog(@"Document added with ID: %@", ref.documentID);       }     }];

    Kotlin

    add() メソッドを使用します。

    // Add a new document with a generated id. val data = hashMapOf(     "name" to "Tokyo",     "country" to "Japan", )  db.collection("cities")     .add(data)     .addOnSuccessListener { documentReference ->         Log.d(TAG, "DocumentSnapshot written with ID: ${documentReference.id}")     }     .addOnFailureListener { e ->         Log.w(TAG, "Error adding document", e)     }

    Java

    add() メソッドを使用します。

    // Add a new document with a generated id. Map<String, Object> data = new HashMap<>(); data.put("name", "Tokyo"); data.put("country", "Japan");  db.collection("cities")         .add(data)         .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {             @Override             public void onSuccess(DocumentReference documentReference) {                 Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId());             }         })         .addOnFailureListener(new OnFailureListener() {             @Override             public void onFailure(@NonNull Exception e) {                 Log.w(TAG, "Error adding document", e);             }         });

    Dart

    add() メソッドを使用します。

    // Add a new document with a generated id. final data = {"name": "Tokyo", "country": "Japan"};  db.collection("cities").add(data).then((documentSnapshot) =>     print("Added Data with ID: ${documentSnapshot.id}"));
    Java

    add() メソッドを使用します。

    // Add document data with auto-generated id. Map<String, Object> data = new HashMap<>(); data.put("name", "Tokyo"); data.put("country", "Japan"); ApiFuture<DocumentReference> addedDocRef = db.collection("cities").add(data); System.out.println("Added document with ID: " + addedDocRef.get().getId());
    Python

    add() メソッドを使用します。

    city = {"name": "Tokyo", "country": "Japan"} update_time, city_ref = db.collection("cities").add(city) print(f"Added document with id {city_ref.id}")

    Python

    add() メソッドを使用します。

    city = City(name="Tokyo", state=None, country="Japan") await db.collection("cities").add(city.to_dict())
    C++

    Add() メソッドを使用します。

    db->Collection("cities").Add({/*some data*/});
    Node.js

    add() メソッドを使用します。

    // Add a new document with a generated id. const res = await db.collection('cities').add({   name: 'Tokyo',   country: 'Japan' });  console.log('Added document with ID: ', res.id);
    Go

    Add() メソッドを使用します。

     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func addDocWithoutID(ctx context.Context, client *firestore.Client) error { 	_, _, err := client.Collection("cities").Add(ctx, map[string]interface{}{ 		"name":    "Tokyo", 		"country": "Japan", 	}) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    add() メソッドを使用します。

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $data = [     'name' => 'Tokyo',     'country' => 'Japan' ]; $addedDocRef = $db->collection('samples/php/cities')->add($data); printf('Added document with ID: %s' . PHP_EOL, $addedDocRef->id());
    Unity

    AddAsync() メソッドを使用します。

    Dictionary<string, object> city = new Dictionary<string, object> { 	{ "Name", "Tokyo" }, 	{ "Country", "Japan" } }; db.Collection("cities").AddAsync(city).ContinueWithOnMainThread(task => { 	DocumentReference addedDocRef = task.Result; 	Debug.Log(String.Format("Added document with ID: {0}.", addedDocRef.Id)); });
    C#

    AddAsync() メソッドを使用します。

    Dictionary<string, object> city = new Dictionary<string, object> {     { "Name", "Tokyo" },     { "Country", "Japan" } }; DocumentReference addedDocRef = await db.Collection("cities").AddAsync(city); Console.WriteLine("Added document with ID: {0}.", addedDocRef.Id);
    Ruby

    add() メソッドを使用します。

    data = {   name:    "Tokyo",   country: "Japan" }  cities_ref = firestore.col collection_path  added_doc_ref = cities_ref.add data puts "Added document with ID: #{added_doc_ref.document_id}."

    この例では、cities などのトップレベルのコレクションにデータを追加しています。Cloud Firestore は、cities/LA/landmarks などのドキュメント内のサブコレクションもサポートしています。サブコレクションを操作する場合も、同じ set()add()update() メソッドが適用されます。

    自動生成された ID を持つドキュメント参照を作成して、後でその参照を利用するのが実用的な場合もあります。このユースケースでは、以下の方法で doc() を呼び出します。

    Web

    import { collection, doc, setDoc } from "firebase/firestore";   // Add a new document with a generated id const newCityRef = doc(collection(db, "cities"));  // later... await setDoc(newCityRef, data);

    Web

    // Add a new document with a generated id. var newCityRef = db.collection("cities").doc();  // later... newCityRef.set(data);
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    let newCityRef = db.collection("cities").document()  // later... newCityRef.setData([   // ... ])
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    FIRDocumentReference *newCityRef = [[self.db collectionWithPath:@"cities"] documentWithAutoID]; // later... [newCityRef setData:@{ /* ... */ }];

    Kotlin

    val data = HashMap<String, Any>()  val newCityRef = db.collection("cities").document()  // Later... newCityRef.set(data)

    Java

    Map<String, Object> data = new HashMap<>();  DocumentReference newCityRef = db.collection("cities").document();  // Later... newCityRef.set(data);

    Dart

    // Add a new document with a generated id. final data = <String, dynamic>{};  final newCityRef = db.collection("cities").doc();  // Later... newCityRef.set(data); 
    Java
    // Add document data after generating an id. DocumentReference addedDocRef = db.collection("cities").document(); System.out.println("Added document with ID: " + addedDocRef.getId());  // later... ApiFuture<WriteResult> writeResult = addedDocRef.set(data);
    Python
    new_city_ref = db.collection("cities").document()  # later... new_city_ref.set(     {         # ...     } )

    Python

    new_city_ref = db.collection("cities").document()  # later... await new_city_ref.set(     {         # ...     } )
    C++
    DocumentReference new_city_ref = db->Collection("cities").Document();
    Node.js
    const newCityRef = db.collection('cities').doc();  // Later... const res = await newCityRef.set({   // ... });
    Go
     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func addDocAfterAutoGeneratedID(ctx context.Context, client *firestore.Client) error { 	data := City{ 		Name:    "Sydney", 		Country: "Australia", 	}  	ref := client.Collection("cities").NewDoc()  	// later... 	_, err := ref.Set(ctx, data) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $addedDocRef = $db->collection('samples/php/cities')->newDocument(); printf('Added document with ID: %s' . PHP_EOL, $addedDocRef->id()); $addedDocRef->set($data);
    Unity
    DocumentReference addedDocRef = db.Collection("cities").Document(); Debug.Log(String.Format("Added document with ID: {0}.", addedDocRef.Id)); addedDocRef.SetAsync(city).ContinueWithOnMainThread(task => { 	Debug.Log(String.Format( 		"Added data to the {0} document in the cities collection.", addedDocRef.Id)); });
    C#
    DocumentReference addedDocRef = db.Collection("cities").Document(); Console.WriteLine("Added document with ID: {0}.", addedDocRef.Id); await addedDocRef.SetAsync(city);
    Ruby
    cities_ref = firestore.col collection_path  added_doc_ref = cities_ref.doc puts "Added document with ID: #{added_doc_ref.document_id}."  added_doc_ref.set data

    バックエンドでは .add(...).doc().set(...) は同等であるため、どちらのオプションも使用できます。

    ドキュメントを更新する

    ドキュメント全体を上書きすることなく一部のフィールドを更新するには、言語固有の次の update() メソッドを使用します。

    Web

    updateDoc() メソッドを使用します。

    import { doc, updateDoc } from "firebase/firestore";  const washingtonRef = doc(db, "cities", "DC");  // Set the "capital" field of the city 'DC' await updateDoc(washingtonRef, {   capital: true });

    Web

    update() メソッドを使用します。

    var washingtonRef = db.collection("cities").doc("DC");  // Set the "capital" field of the city 'DC' return washingtonRef.update({     capital: true }) .then(() => {     console.log("Document successfully updated!"); }) .catch((error) => {     // The document probably doesn't exist.     console.error("Error updating document: ", error); });
    Swift

    updateData() メソッドを使用します。

    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    let washingtonRef = db.collection("cities").document("DC")  // Set the "capital" field of the city 'DC' do {   try await washingtonRef.updateData([     "capital": true   ])   print("Document successfully updated") } catch {   print("Error updating document: \(error)") }
    Objective-C

    updateData: メソッドを使用します。

    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    FIRDocumentReference *washingtonRef =     [[self.db collectionWithPath:@"cities"] documentWithPath:@"DC"]; // Set the "capital" field of the city [washingtonRef updateData:@{   @"capital": @YES } completion:^(NSError * _Nullable error) {   if (error != nil) {     NSLog(@"Error updating document: %@", error);   } else {     NSLog(@"Document successfully updated");   } }];

    Kotlin

    update() メソッドを使用します。

    val washingtonRef = db.collection("cities").document("DC")  // Set the "isCapital" field of the city 'DC' washingtonRef     .update("capital", true)     .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully updated!") }     .addOnFailureListener { e -> Log.w(TAG, "Error updating document", e) }

    Java

    update() メソッドを使用します。

    DocumentReference washingtonRef = db.collection("cities").document("DC");  // Set the "isCapital" field of the city 'DC' washingtonRef         .update("capital", true)         .addOnSuccessListener(new OnSuccessListener<Void>() {             @Override             public void onSuccess(Void aVoid) {                 Log.d(TAG, "DocumentSnapshot successfully updated!");             }         })         .addOnFailureListener(new OnFailureListener() {             @Override             public void onFailure(@NonNull Exception e) {                 Log.w(TAG, "Error updating document", e);             }         });

    Dart

    update() メソッドを使用します。

    final washingtonRef = db.collection("cites").doc("DC"); washingtonRef.update({"capital": true}).then(     (value) => print("DocumentSnapshot successfully updated!"),     onError: (e) => print("Error updating document $e"));
    Java

    update() メソッドを使用します。

    // Update an existing document DocumentReference docRef = db.collection("cities").document("DC");  // (async) Update one field ApiFuture<WriteResult> future = docRef.update("capital", true);  // ... WriteResult result = future.get(); System.out.println("Write result: " + result);
    Python

    update() メソッドを使用します。

    city_ref = db.collection("cities").document("DC")  # Set the capital field city_ref.update({"capital": True})

    Python

    update() メソッドを使用します。

    city_ref = db.collection("cities").document("DC")  # Set the capital field await city_ref.update({"capital": True})
    C++

    Update() メソッドを使用します。

    DocumentReference washington_ref = db->Collection("cities").Document("DC"); // Set the "capital" field of the city "DC". washington_ref.Update({{"capital", FieldValue::Boolean(true)}});
    Node.js

    update() メソッドを使用します。

    const cityRef = db.collection('cities').doc('DC');  // Set the 'capital' field of the city const res = await cityRef.update({capital: true});
    Go

    Update() メソッドを使用します。

     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func updateDoc(ctx context.Context, client *firestore.Client) error { 	// ...  	_, err := client.Collection("cities").Doc("DC").Update(ctx, []firestore.Update{ 		{ 			Path:  "capital", 			Value: true, 		}, 	}) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    update() メソッドを使用します。

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $cityRef = $db->collection('samples/php/cities')->document('DC'); $cityRef->update([     ['path' => 'capital', 'value' => true] ]);
    Unity

    UpdateAsync() メソッドを使用します。

    DocumentReference cityRef = db.Collection("cities").Document("new-city-id"); Dictionary<string, object> updates = new Dictionary<string, object> { 	{ "Capital", false } };  cityRef.UpdateAsync(updates).ContinueWithOnMainThread(task => { 	Debug.Log( 		"Updated the Capital field of the new-city-id document in the cities collection."); }); // You can also update a single field with: cityRef.UpdateAsync("Capital", false);
    C#

    UpdateAsync() メソッドを使用します。

    DocumentReference cityRef = db.Collection("cities").Document("new-city-id"); Dictionary<string, object> updates = new Dictionary<string, object> {     { "Capital", false } }; await cityRef.UpdateAsync(updates);  // You can also update a single field with: await cityRef.UpdateAsync("Capital", false);
    Ruby

    update() メソッドを使用します。

    city_ref = firestore.doc "#{collection_path}/DC" city_ref.update({ capital: true })

    サーバーのタイムスタンプ

    ドキュメントのフィールドに、サーバーが更新を受信した時刻を追跡するサーバーのタイムスタンプを設定できます。

    Web

    import { updateDoc, serverTimestamp } from "firebase/firestore";  const docRef = doc(db, 'objects', 'some-id');  // Update the timestamp field with the value from the server const updateTimestamp = await updateDoc(docRef, {     timestamp: serverTimestamp() });

    Web

    var docRef = db.collection('objects').doc('some-id');  // Update the timestamp field with the value from the server var updateTimestamp = docRef.update({     timestamp: firebase.firestore.FieldValue.serverTimestamp() });
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    do {   try await db.collection("objects").document("some-id").updateData([     "lastUpdated": FieldValue.serverTimestamp(),   ])   print("Document successfully updated") } catch {   print("Error updating document: \(error)") }
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    [[[self.db collectionWithPath:@"objects"] documentWithPath:@"some-id"] updateData:@{   @"lastUpdated": [FIRFieldValue fieldValueForServerTimestamp] } completion:^(NSError * _Nullable error) {   if (error != nil) {     NSLog(@"Error updating document: %@", error);   } else {     NSLog(@"Document successfully updated");   } }];

    Kotlin

    // If you're using custom Kotlin objects in Android, add an @ServerTimestamp // annotation to a Date field for your custom object classes. This indicates // that the Date field should be treated as a server timestamp by the object mapper. val docRef = db.collection("objects").document("some-id")  // Update the timestamp field with the value from the server val updates = hashMapOf<String, Any>(     "timestamp" to FieldValue.serverTimestamp(), )  docRef.update(updates).addOnCompleteListener { }

    Java

    // If you're using custom Java objects in Android, add an @ServerTimestamp // annotation to a Date field for your custom object classes. This indicates // that the Date field should be treated as a server timestamp by the object mapper. DocumentReference docRef = db.collection("objects").document("some-id");  // Update the timestamp field with the value from the server Map<String,Object> updates = new HashMap<>(); updates.put("timestamp", FieldValue.serverTimestamp());  docRef.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() {     // ...     // ...

    Dart

    final docRef = db.collection("objects").doc("some-id"); final updates = <String, dynamic>{   "timestamp": FieldValue.serverTimestamp(), };  docRef.update(updates).then(     (value) => print("DocumentSnapshot successfully updated!"),     onError: (e) => print("Error updating document $e"));
    Java
    DocumentReference docRef = db.collection("objects").document("some-id"); // Update the timestamp field with the value from the server ApiFuture<WriteResult> writeResult = docRef.update("timestamp", FieldValue.serverTimestamp()); System.out.println("Update time : " + writeResult.get());
    Python
    city_ref = db.collection("objects").document("some-id") city_ref.update({"timestamp": firestore.SERVER_TIMESTAMP})

    Python

    city_ref = db.collection("objects").document("some-id") await city_ref.update({"timestamp": firestore.SERVER_TIMESTAMP})
    C++
    DocumentReference doc_ref = db->Collection("objects").Document("some-id"); doc_ref.Update({{"timestamp", FieldValue::ServerTimestamp()}})     .OnCompletion([](const Future<void>& future) {       // ...     });
    Node.js
    // Create a document reference const docRef = db.collection('objects').doc('some-id');  // Update the timestamp field with the value from the server const res = await docRef.update({   timestamp: FieldValue.serverTimestamp() });
    Go
     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func updateDocServerTimestamp(ctx context.Context, client *firestore.Client) error { 	// ...  	_, err := client.Collection("objects").Doc("some-id").Set(ctx, map[string]interface{}{ 		"timestamp": firestore.ServerTimestamp, 	}, firestore.MergeAll) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $docRef = $db->collection('samples/php/objects')->document('some-id'); $docRef->update([     ['path' => 'timestamp', 'value' => FieldValue::serverTimestamp()] ]);
    Unity
    DocumentReference cityRef = db.Collection("cities").Document("new-city-id"); cityRef.UpdateAsync("Timestamp", FieldValue.ServerTimestamp) 	.ContinueWithOnMainThread(task => { 		Debug.Log( 			"Updated the Timestamp field of the new-city-id document in the cities " 			+ "collection."); 	});
    C#
    DocumentReference cityRef = db.Collection("cities").Document("new-city-id"); await cityRef.UpdateAsync("Timestamp", Timestamp.GetCurrentTimestamp());
    Ruby
    city_ref = firestore.doc "#{collection_path}/new-city-id" city_ref.update({ timestamp: firestore.field_server_time })

    トランザクション内の複数のタイムスタンプ フィールドを更新する場合、各フィールドのサーバーのタイムスタンプ値は同じになります。

    ネストされたオブジェクトのフィールドを更新する

    ネストされたオブジェクトがドキュメントに含まれている場合は、update() を呼び出すときに「ドット表記」を使用してドキュメント内のネストされたフィールドを参照できます。

    Web

    import { doc, setDoc, updateDoc } from "firebase/firestore";   // Create an initial document to update. const frankDocRef = doc(db, "users", "frank"); await setDoc(frankDocRef, {     name: "Frank",     favorites: { food: "Pizza", color: "Blue", subject: "recess" },     age: 12 });  // To update age and favorite color: await updateDoc(frankDocRef, {     "age": 13,     "favorites.color": "Red" });

    Web

    // Create an initial document to update. var frankDocRef = db.collection("users").doc("frank"); frankDocRef.set({     name: "Frank",     favorites: { food: "Pizza", color: "Blue", subject: "recess" },     age: 12 });  // To update age and favorite color: db.collection("users").doc("frank").update({     "age": 13,     "favorites.color": "Red" }) .then(() => {     console.log("Document successfully updated!"); });
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Create an initial document to update. let frankDocRef = db.collection("users").document("frank") do {   try await frankDocRef.setData([     "name": "Frank",     "favorites": [ "food": "Pizza", "color": "Blue", "subject": "recess" ],     "age": 12   ])    // To update age and favorite color:   try await frankDocRef.updateData([     "age": 13,     "favorites.color": "Red"   ])   print("Document successfully updated") } catch {   print("Error updating document: \(error)") }
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    // Create an initial document to update. FIRDocumentReference *frankDocRef =     [[self.db collectionWithPath:@"users"] documentWithPath:@"frank"]; [frankDocRef setData:@{   @"name": @"Frank",   @"favorites": @{     @"food": @"Pizza",     @"color": @"Blue",     @"subject": @"recess"   },   @"age": @12 }]; // To update age and favorite color: [frankDocRef updateData:@{   @"age": @13,   @"favorites.color": @"Red", } completion:^(NSError * _Nullable error) {   if (error != nil) {     NSLog(@"Error updating document: %@", error);   } else {     NSLog(@"Document successfully updated");   } }];

    Kotlin

    // Assume the document contains: // { //   name: "Frank", //   favorites: { food: "Pizza", color: "Blue", subject: "recess" } //   age: 12 // } // // To update age and favorite color: db.collection("users").document("frank")     .update(         mapOf(             "age" to 13,             "favorites.color" to "Red",         ),     )

    Java

    // Assume the document contains: // { //   name: "Frank", //   favorites: { food: "Pizza", color: "Blue", subject: "recess" } //   age: 12 // } // // To update age and favorite color: db.collection("users").document("frank")         .update(                 "age", 13,                 "favorites.color", "Red"         );

    Dart

    // Assume the document contains: // { //   name: "Frank", //   favorites: { food: "Pizza", color: "Blue", subject: "recess" } //   age: 12 // } db     .collection("users")     .doc("frank")     .update({"age": 13, "favorites.color": "Red"});
    Java
    // Create an initial document to update DocumentReference frankDocRef = db.collection("users").document("frank"); Map<String, Object> initialData = new HashMap<>(); initialData.put("name", "Frank"); initialData.put("age", 12);  Map<String, Object> favorites = new HashMap<>(); favorites.put("food", "Pizza"); favorites.put("color", "Blue"); favorites.put("subject", "Recess"); initialData.put("favorites", favorites);  ApiFuture<WriteResult> initialResult = frankDocRef.set(initialData); // Confirm that data has been successfully saved by blocking on the operation initialResult.get();  // Update age and favorite color Map<String, Object> updates = new HashMap<>(); updates.put("age", 13); updates.put("favorites.color", "Red");  // Async update document ApiFuture<WriteResult> writeResult = frankDocRef.update(updates); // ... System.out.println("Update time : " + writeResult.get().getUpdateTime());
    Python
    # Create an initial document to update frank_ref = db.collection("users").document("frank") frank_ref.set(     {         "name": "Frank",         "favorites": {"food": "Pizza", "color": "Blue", "subject": "Recess"},         "age": 12,     } )  # Update age and favorite color frank_ref.update({"age": 13, "favorites.color": "Red"})

    Python

    # Create an initial document to update frank_ref = db.collection("users").document("frank") await frank_ref.set(     {         "name": "Frank",         "favorites": {"food": "Pizza", "color": "Blue", "subject": "Recess"},         "age": 12,     } )  # Update age and favorite color await frank_ref.update({"age": 13, "favorites.color": "Red"})
    C++
    // Assume the document contains: // { //   name: "Frank", //   favorites: { food: "Pizza", color: "Blue", subject: "recess" } //   age: 12 // } // // To update age and favorite color: db->Collection("users").Document("frank").Update({     {"age", FieldValue::Integer(13)},     {"favorites.color", FieldValue::String("red")}, });
    Node.js
    const initialData = {   name: 'Frank',   age: 12,   favorites: {     food: 'Pizza',     color: 'Blue',     subject: 'recess'   } };  // ... const res = await db.collection('users').doc('Frank').update({   age: 13,   'favorites.color': 'Red' });
    Go
     import ( 	"context" 	"log"  	"cloud.google.com/go/firestore" )  func updateDocNested(ctx context.Context, client *firestore.Client) error { 	initialData := map[string]interface{}{ 		"name": "Frank", 		"age":  12, 		"favorites": map[string]interface{}{ 			"food":    "Pizza", 			"color":   "Blue", 			"subject": "recess", 		}, 	}  	// ...  	_, err := client.Collection("users").Doc("frank").Set(ctx, map[string]interface{}{ 		"age": 13, 		"favorites": map[string]interface{}{ 			"color": "Red", 		}, 	}, firestore.MergeAll) 	if err != nil { 		// Handle any errors in an appropriate way, such as returning them. 		log.Printf("An error has occurred: %s", err) 	}  	return err } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    // Create an initial document to update $frankRef = $db->collection('samples/php/users')->document('frank'); $frankRef->set([     'first' => 'Frank',     'last' => 'Franklin',     'favorites' => ['food' => 'Pizza', 'color' => 'Blue', 'subject' => 'Recess'],     'age' => 12 ]);  // Update age and favorite color $frankRef->update([     ['path' => 'age', 'value' => 13],     ['path' => 'favorites.color', 'value' => 'Red'] ]);
    Unity
    DocumentReference frankDocRef = db.Collection("users").Document("frank"); Dictionary<string, object> initialData = new Dictionary<string, object> { 	{ "Name", "Frank" }, 	{ "Age", 12 } };  Dictionary<string, object> favorites = new Dictionary<string, object> { 	{ "Food", "Pizza" }, 	{ "Color", "Blue" }, 	{ "Subject", "Recess" }, }; initialData.Add("Favorites", favorites); frankDocRef.SetAsync(initialData).ContinueWithOnMainThread(task => {  	// Update age and favorite color 	Dictionary<string, object> updates = new Dictionary<string, object> 	{ 		{ "Age", 13 }, 		{ "Favorites.Color", "Red" }, 	};  	// Asynchronously update the document 	return frankDocRef.UpdateAsync(updates); }).ContinueWithOnMainThread(task => { 	Debug.Log( 		"Updated the age and favorite color fields of the Frank document in " 		+ "the users collection."); });
    C#
    DocumentReference frankDocRef = db.Collection("users").Document("frank"); Dictionary<string, object> initialData = new Dictionary<string, object> {     { "Name", "Frank" },     { "Age", 12 } };  Dictionary<string, object> favorites = new Dictionary<string, object> {     { "Food", "Pizza" },     { "Color", "Blue" },     { "Subject", "Recess" }, }; initialData.Add("Favorites", favorites); await frankDocRef.SetAsync(initialData);  // Update age and favorite color Dictionary<string, object> updates = new Dictionary<string, object> {     { "Age", 13 },     { "Favorites.Color", "Red" }, };  // Asynchronously update the document await frankDocRef.UpdateAsync(updates);
    Ruby
    # Create an initial document to update frank_ref = firestore.doc "#{collection_path}/frank" frank_ref.set(   {     name:      "Frank",     favorites: {       food:    "Pizza",       color:   "Blue",       subject: "Recess"     },     age:       12   } )  # Update age and favorite color frank_ref.update({ age: 13, "favorites.color": "Red" })

    ドット表記を使用すると、1 個のネストされたフィールドを更新する際、他のネストされたフィールドを上書きせずに済みます。次の例に示すように、ドット表記を使用せずにネストされたフィールドを更新すると、マップ フィールド全体が上書きされます。

    ウェブ
    // Create our initial doc db.collection("users").doc("frank").set({   name: "Frank",   favorites: {     food: "Pizza",     color: "Blue",     subject: "Recess"   },   age: 12 }).then(function() {   console.log("Frank created"); });  // Update the doc without using dot notation. // Notice the map value for favorites. db.collection("users").doc("frank").update({   favorites: {     food: "Ice Cream"   } }).then(function() {   console.log("Frank food updated"); });  /* Ending State, favorite.color and favorite.subject are no longer present: /users     /frank         {             name: "Frank",             favorites: {                 food: "Ice Cream",             },             age: 12         }  */

    配列内の要素を更新する

    ドキュメントに配列フィールドがある場合は、arrayUnion()arrayRemove() を使用して要素を追加および削除できます。arrayUnion() は要素を配列に追加しますが、追加されるのはまだ存在しない要素のみです。arrayRemove() は指定した各要素のすべてのインスタンスを削除します。

    Web

    import { doc, updateDoc, arrayUnion, arrayRemove } from "firebase/firestore";  const washingtonRef = doc(db, "cities", "DC");  // Atomically add a new region to the "regions" array field. await updateDoc(washingtonRef, {     regions: arrayUnion("greater_virginia") });  // Atomically remove a region from the "regions" array field. await updateDoc(washingtonRef, {     regions: arrayRemove("east_coast") });

    Web

    var washingtonRef = db.collection("cities").doc("DC");  // Atomically add a new region to the "regions" array field. washingtonRef.update({     regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia") });  // Atomically remove a region from the "regions" array field. washingtonRef.update({     regions: firebase.firestore.FieldValue.arrayRemove("east_coast") });
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    let washingtonRef = db.collection("cities").document("DC")  // Atomically add a new region to the "regions" array field. washingtonRef.updateData([   "regions": FieldValue.arrayUnion(["greater_virginia"]) ])  // Atomically remove a region from the "regions" array field. washingtonRef.updateData([   "regions": FieldValue.arrayRemove(["east_coast"]) ])
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    FIRDocumentReference *washingtonRef =     [[self.db collectionWithPath:@"cities"] documentWithPath:@"DC"];  // Atomically add a new region to the "regions" array field. [washingtonRef updateData:@{   @"regions": [FIRFieldValue fieldValueForArrayUnion:@[@"greater_virginia"]] }];  // Atomically remove a new region to the "regions" array field. [washingtonRef updateData:@{   @"regions": [FIRFieldValue fieldValueForArrayRemove:@[@"east_coast"]] }];

    Kotlin

    val washingtonRef = db.collection("cities").document("DC")  // Atomically add a new region to the "regions" array field. washingtonRef.update("regions", FieldValue.arrayUnion("greater_virginia"))  // Atomically remove a region from the "regions" array field. washingtonRef.update("regions", FieldValue.arrayRemove("east_coast"))

    Java

    DocumentReference washingtonRef = db.collection("cities").document("DC");  // Atomically add a new region to the "regions" array field. washingtonRef.update("regions", FieldValue.arrayUnion("greater_virginia"));  // Atomically remove a region from the "regions" array field. washingtonRef.update("regions", FieldValue.arrayRemove("east_coast"));

    Dart

    final washingtonRef = db.collection("cities").doc("DC");  // Atomically add a new region to the "regions" array field. washingtonRef.update({   "regions": FieldValue.arrayUnion(["greater_virginia"]), });  // Atomically remove a region from the "regions" array field. washingtonRef.update({   "regions": FieldValue.arrayRemove(["east_coast"]), });
    Java
    DocumentReference washingtonRef = db.collection("cities").document("DC");  // Atomically add a new region to the "regions" array field. ApiFuture<WriteResult> arrayUnion =     washingtonRef.update("regions", FieldValue.arrayUnion("greater_virginia")); System.out.println("Update time : " + arrayUnion.get());  // Atomically remove a region from the "regions" array field. ApiFuture<WriteResult> arrayRm =     washingtonRef.update("regions", FieldValue.arrayRemove("east_coast")); System.out.println("Update time : " + arrayRm.get());
    Python
    city_ref = db.collection("cities").document("DC")  # Atomically add a new region to the 'regions' array field. city_ref.update({"regions": firestore.ArrayUnion(["greater_virginia"])})  # // Atomically remove a region from the 'regions' array field. city_ref.update({"regions": firestore.ArrayRemove(["east_coast"])})

    Python

    city_ref = db.collection("cities").document("DC")  # Atomically add a new region to the 'regions' array field. await city_ref.update({"regions": firestore.ArrayUnion(["greater_virginia"])})  # // Atomically remove a region from the 'regions' array field. await city_ref.update({"regions": firestore.ArrayRemove(["east_coast"])})
    C++
    // This is not yet supported.
    Node.js
    // ... const washingtonRef = db.collection('cities').doc('DC');  // Atomically add a new region to the "regions" array field. const unionRes = await washingtonRef.update({   regions: FieldValue.arrayUnion('greater_virginia') }); // Atomically remove a region from the "regions" array field. const removeRes = await washingtonRef.update({   regions: FieldValue.arrayRemove('east_coast') });  // To add or remove multiple items, pass multiple arguments to arrayUnion/arrayRemove const multipleUnionRes = await washingtonRef.update({   regions: FieldValue.arrayUnion('south_carolina', 'texas')   // Alternatively, you can use spread operator in ES6 syntax   // const newRegions = ['south_carolina', 'texas']   // regions: FieldValue.arrayUnion(...newRegions) });
    Go
    // Not supported yet
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $cityRef = $db->collection('samples/php/cities')->document('DC');  // Atomically add a new region to the "regions" array field. $cityRef->update([     ['path' => 'regions', 'value' => FieldValue::arrayUnion(['greater_virginia'])] ]);  // Atomically remove a region from the "regions" array field. $cityRef->update([     ['path' => 'regions', 'value' => FieldValue::arrayRemove(['east_coast'])] ]);
    Unity
    // This is not yet supported in the Unity SDK   
    C#
    DocumentReference washingtonRef = db.Collection("cities").Document("DC");  // Atomically add a new region to the "regions" array field. await washingtonRef.UpdateAsync("Regions", FieldValue.ArrayUnion("greater_virginia"));  // Atomically remove a region from the "regions" array field. await washingtonRef.UpdateAsync("Regions", FieldValue.ArrayRemove("east_coast"));
    Ruby
    // Not supported yet

    数値を増減させる

    次の例に示すように、数値フィールドの値は増減できます。increment オペレーションは、フィールドの現在の値を指定された分だけ増加させます。

    Web

    import { doc, updateDoc, increment } from "firebase/firestore";  const washingtonRef = doc(db, "cities", "DC");  // Atomically increment the population of the city by 50. await updateDoc(washingtonRef, {     population: increment(50) });

    Web

    var washingtonRef = db.collection('cities').doc('DC');  // Atomically increment the population of the city by 50. washingtonRef.update({     population: firebase.firestore.FieldValue.increment(50) });
    Swift
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    let washingtonRef = db.collection("cities").document("DC")  // Atomically increment the population of the city by 50. // Note that increment() with no arguments increments by 1. washingtonRef.updateData([   "population": FieldValue.increment(Int64(50)) ])
    Objective-C
    注: このプロダクトは、watchOS と App Clip の各ターゲットでは利用できません。
    FIRDocumentReference *washingtonRef =     [[self.db collectionWithPath:@"cities"] documentWithPath:@"DC"];  // Atomically increment the population of the city by 50. // Note that increment() with no arguments increments by 1. [washingtonRef updateData:@{   @"population": [FIRFieldValue fieldValueForIntegerIncrement:50] }];

    Kotlin

    val washingtonRef = db.collection("cities").document("DC")  // Atomically increment the population of the city by 50. washingtonRef.update("population", FieldValue.increment(50))

    Java

    DocumentReference washingtonRef = db.collection("cities").document("DC");  // Atomically increment the population of the city by 50. washingtonRef.update("population", FieldValue.increment(50));

    Dart

    var washingtonRef = db.collection('cities').doc('DC');  // Atomically increment the population of the city by 50. washingtonRef.update(   {"population": FieldValue.increment(50)}, );
    Java
    DocumentReference washingtonRef = db.collection("cities").document("DC");  // Atomically increment the population of the city by 50. final ApiFuture<WriteResult> updateFuture =     washingtonRef.update("population", FieldValue.increment(50));
    Python
    washington_ref = db.collection("cities").document("DC")  washington_ref.update({"population": firestore.Increment(50)})

    Python

    washington_ref = db.collection("cities").document("DC")  await washington_ref.update({"population": firestore.Increment(50)})
    C++
    // This is not yet supported.
    Node.js
    // ... const washingtonRef = db.collection('cities').doc('DC');  // Atomically increment the population of the city by 50. const res = await washingtonRef.update({   population: FieldValue.increment(50) });
    Go
    import ( 	"context" 	"fmt"  	"cloud.google.com/go/firestore" )  // updateDocumentIncrement increments the population of the city document in the // cities collection by 50. func updateDocumentIncrement(projectID, city string) error { 	// projectID := "my-project"  	ctx := context.Background()  	client, err := firestore.NewClient(ctx, projectID) 	if err != nil { 		return fmt.Errorf("firestore.NewClient: %w", err) 	} 	defer client.Close()  	dc := client.Collection("cities").Doc(city) 	_, err = dc.Update(ctx, []firestore.Update{ 		{Path: "population", Value: firestore.Increment(50)}, 	}) 	if err != nil { 		return fmt.Errorf("Update: %w", err) 	}  	return nil } 
    PHP

    PHP

    Cloud Firestore クライアントのインストールと作成の詳細については、Cloud Firestore クライアント ライブラリをご覧ください。

    $cityRef = $db->collection('samples/php/cities')->document('DC');  // Atomically increment the population of the city by 50. $cityRef->update([     ['path' => 'regions', 'value' => FieldValue::increment(50)] ]);
    Unity
    // This is not yet supported in the Unity SDK.   
    C#
    DocumentReference washingtonRef = db.Collection("cities").Document("DC");  // Atomically increment the population of the city by 50. await washingtonRef.UpdateAsync("Regions", FieldValue.Increment(50));
    Ruby
    city_ref = firestore.doc "#{collection_path}/DC" city_ref.update({ population: firestore.field_increment(50) })

    increment オペレーションはカウンタの実装に役立ちます。1 つのドキュメントをあまりに頻繁に更新すると、競合やエラーが発生する可能性があります。カウンタを非常に高い頻度で更新する必要がある場合は、分散カウンタのページをご覧ください。