Firebase Summit のすべての発表内容に目を通し、Firebase を活用してアプリ開発を加速し、自信を持ってアプリを実行できる方法をご確認ください。 詳細

CloudFirestoreにデータを追加する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Cloud Firestore にデータを書き込む方法はいくつかあります。

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

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

あなたが始める前に

Cloud Firestore データベースを作成するには、「Cloud Firestore を使ってみる」を参照してください。

Cloud Firestore の初期化

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

Web version 9

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 version 8

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に置き換えます。

デバイスが接続を失ったときにデータを保持するには、オフライン データの有効化に関するドキュメントを参照してください。

迅速
注:この製品は、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];

Java

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

Kotlin+KTX

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

Dart

db = FirebaseFirestore.instance;
ジャワ
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();
    
  • パイソン
    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 } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Google Cloud で初期化する
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = 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 } = require('firebase-admin/firestore');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      initializeApp({
        credential: cert(serviceAccount)
      });
      
      const db = getFirestore();
      
    行け
    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);
        }
    }
    団結
    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);
    ルビー
    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."

    ドキュメントを設定する

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

    Web version 9

    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 version 8

    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);
    });
    迅速

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

    注:この製品は、watchOS および App Clip ターゲットでは使用できません。
    // Add a new document in collection "cities"
    db.collection("cities").document("LA").setData([
        "name": "Los Angeles",
        "state": "CA",
        "country": "USA"
    ]) { err in
        if let err = err {
            print("Error writing document: \(err)")
        } else {
            print("Document successfully written!")
        }
    }
    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+KTX

    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"));
    ジャワ

    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());
    パイソン

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

    data = {
        u'name': u'Los Angeles',
        u'state': u'CA',
        u'country': u'USA'
    }
    
    # Add a new doc in collection 'cities' with ID 'LA'
    db.collection(u'cities').document(u'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);
    行け

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

    _, 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)
    }
    PHP

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

    PHP

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

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

    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);
    ルビー

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

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

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

    Web version 9

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

    Web version 8

    var cityRef = db.collection('cities').doc('BJ');
    
    var setWithMerge = cityRef.set({
        capital: true
    }, { merge: true });
    迅速
    注:この製品は、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+KTX

    // 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));
    ジャワ
    // 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());
    パイソン
    city_ref = db.collection(u'cities').document(u'BJ')
    
    city_ref.set({
        u'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 });
    行け
    _, 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)
    }
    PHP

    PHP

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

    $cityRef = $db->collection('samples/php/cities')->document('BJ');
    $cityRef->set([
        'capital' => true
    ], ['merge' => true]);
    団結
    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);
    ルビー
    city_ref = firestore.doc "#{collection_path}/LA"
    city_ref.set({ capital: false }, merge: true)

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

    データ型

    Cloud Firestore を使用すると、文字列、ブール値、数値、日付、null、ネストされた配列やオブジェクトなど、さまざまなデータ型をドキュメント内に書き込むことができます。コードで使用する数値のタイプに関係なく、Cloud Firestore は常に数値を double として格納します。

    Web version 9

    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 version 8

    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!");
    });
    迅速
    注:この製品は、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"
            ]
        ]
    ]
    db.collection("data").document("one").setData(docData) { err in
        if let err = err {
            print("Error writing document: \(err)")
        } else {
            print("Document successfully written!")
        }
    }
    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+KTX

    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"));
    ジャワ
    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());
    パイソン
    data = {
        u'stringExample': u'Hello, World!',
        u'booleanExample': True,
        u'numberExample': 3.14159265,
        u'dateExample': datetime.datetime.now(tz=datetime.timezone.utc),
        u'arrayExample': [5, True, u'hello'],
        u'nullExample': None,
        u'objectExample': {
            u'a': 5,
            u'b': True
        }
    }
    
    db.collection(u'data').document(u'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);
    行け
    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)
    }
    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);
    団結
    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 },
    };
    
    ArrayList arrayExample = new ArrayList();
    arrayExample.Add(5);
    arrayExample.Add(true);
    arrayExample.Add("Hello");
    docData.Add("arrayExample", arrayExample);
    
    Dictionary<string, object> objectExample = new Dictionary<string, object>
    {
        { "a", 5 },
        { "b", true },
    };
    docData.Add("objectExample", objectExample);
    
    await docRef.SetAsync(docData);
    ルビー
    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 version 9

    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 version 8

    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);
        }
    };
    迅速
    注:この製品は、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+KTX

    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,
        };
      }
    }
    ジャワ
    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;
    }
    パイソン
    class City(object):
        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(object):
        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
    
    行け
    
    // 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"`
    	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 */
        public $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;
        }
    
        public static function fromArray(array $source): City
        {
            // implementation of fromArray is excluded for brevity
            # ...
        }
    
        public function toArray(): array
        {
            // implementation of toArray is excluded for brevity
            # ...
        }
    
        public function __toString()
        {
            // implementation of __toString is excluded for brevity
            # ...
        }
    }
    
    団結
    [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; }
    }
    ルビー
    // This isn't supported in Ruby
    

    Web version 9

    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 version 8

    // Set with cityConverter
    db.collection("cities").doc("LA")
      .withConverter(cityConverter)
      .set(new City("Los Angeles", "CA", "USA"));
    迅速
    注:この製品は、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+KTX

    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);
    ジャワ
    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());
    パイソン
    city = City(name=u'Los Angeles', state=u'CA', country=u'USA')
    db.collection(u'cities').document(u'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
    
    行け
    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)
    }
    PHP
    // This isn't supported in PHP.
    
    団結
    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);
    ルビー
    // This isn't supported in Ruby.
    

    ドキュメントを追加する

    set()を使用してドキュメントを作成する場合、作成するドキュメントの ID を指定する必要があります。例えば:

    Web version 9

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

    Web version 8

    db.collection("cities").doc("new-city-id").set(data);
    迅速
    注:この製品は、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+KTX

    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"});
    ジャワ
    db.collection("cities").document("new-city-id").set(data);
    パイソン
    db.collection(u'cities').document(u'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);
    行け
    _, 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)
    }
    PHP

    PHP

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

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

    ただし、ドキュメントに意味のある ID がない場合があるため、Cloud Firestore に ID を自動生成させる方が便利です。これを行うには、次の言語固有のadd()メソッドを呼び出します。

    Web version 9

    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 version 8

    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);
    });
    迅速

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

    注:この製品は、watchOS および App Clip ターゲットでは使用できません。
    // Add a new document with a generated id.
    var ref: DocumentReference? = nil
    ref = db.collection("cities").addDocument(data: [
        "name": "Tokyo",
        "country": "Japan"
    ]) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            print("Document added with ID: \(ref!.documentID)")
        }
    }
    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+KTX

    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}"));
    ジャワ

    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());
    パイソン

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

    city = {
        u'name': u'Tokyo',
        u'country': u'Japan'
    }
    update_time, city_ref = db.collection(u'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);
    行け

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

    _, _, 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)
    }
    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());
    団結

    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);
    ルビー

    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}."

    場合によっては、自動生成された ID を使用してドキュメント参照を作成し、後でその参照を使用すると便利な場合があります。このユースケースでは、 doc()を呼び出すことができます:

    Web version 9

    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 version 8

    // Add a new document with a generated id.
    var newCityRef = db.collection("cities").doc();
    
    // later...
    newCityRef.set(data);
    迅速
    注:この製品は、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+KTX

    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);
    
    ジャワ
    // 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);
    パイソン
    new_city_ref = db.collection(u'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({
      // ...
    });
    行け
    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)
    }
    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);
    団結
    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);
    ルビー
    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 version 9

    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 version 8

    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);
    });
    迅速

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

    注:この製品は、watchOS および App Clip ターゲットでは使用できません。
    let washingtonRef = db.collection("cities").document("DC")
    
    // Set the "capital" field of the city 'DC'
    washingtonRef.updateData([
        "capital": true
    ]) { err in
        if let err = err {
            print("Error updating document: \(err)")
        } else {
            print("Document successfully updated")
        }
    }
    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+KTX

    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"));
    ジャワ

    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);
    パイソン

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

    city_ref = db.collection(u'cities').document(u'DC')
    
    # Set the capital field
    city_ref.update({u'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});
    行け

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

    _, 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)
    }
    PHP

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

    PHP

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

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

    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);
    ルビー

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

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

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

    サーバーが更新をいつ受信するかを追跡するサーバー タイムスタンプにドキュメント内のフィールドを設定できます。

    Web version 9

    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 version 8

    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()
    });
    迅速
    注:この製品は、watchOS および App Clip ターゲットでは使用できません。
    db.collection("objects").document("some-id").updateData([
        "lastUpdated": FieldValue.serverTimestamp(),
    ]) { err in
        if let err = err {
            print("Error updating document: \(err)")
        } else {
            print("Document successfully updated")
        }
    }
    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+KTX

    // 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"));
    ジャワ
    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());
    パイソン
    city_ref = db.collection(u'objects').document(u'some-id')
    city_ref.update({
        u'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()
    });
    行け
    _, 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)
    }
    PHP

    PHP

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

    $docRef = $db->collection('samples/php/objects')->document('some-id');
    $docRef->update([
        ['path' => 'timestamp', 'value' => FieldValue::serverTimestamp()]
    ]);
    団結
    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());
    ルビー
    city_ref = firestore.doc "#{collection_path}/new-city-id"
    city_ref.update({ timestamp: firestore.field_server_time })

    transaction内の複数のタイムスタンプ フィールドを更新する場合、各フィールドは同じサーバー タイムスタンプ値を受け取ります。

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

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

    Web version 9

    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 version 8

    // 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!");
    });
    迅速
    注:この製品は、watchOS および App Clip ターゲットでは使用できません。
    // Create an initial document to update.
    let frankDocRef = db.collection("users").document("frank")
    frankDocRef.setData([
        "name": "Frank",
        "favorites": [ "food": "Pizza", "color": "Blue", "subject": "recess" ],
        "age": 12
        ])
    
    // To update age and favorite color:
    db.collection("users").document("frank").updateData([
        "age": 13,
        "favorites.color": "Red"
    ]) { err in
        if let err = err {
            print("Error updating document: \(err)")
        } else {
            print("Document successfully updated")
        }
    }
    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+KTX

    // 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"});
    ジャワ
    // 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());
    パイソン
    # Create an initial document to update
    frank_ref = db.collection(u'users').document(u'frank')
    frank_ref.set({
        u'name': u'Frank',
        u'favorites': {
            u'food': u'Pizza',
            u'color': u'Blue',
            u'subject': u'Recess'
        },
        u'age': 12
    })
    
    # Update age and favorite color
    frank_ref.update({
        u'age': 13,
        u'favorites.color': u'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'
    });
    行け
    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)
    }
    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']
    ]);
    団結
    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);
    ルビー
    # 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" })

    ドット表記を使用すると、他のネストされたフィールドを上書きすることなく、単一のネストされたフィールドを更新できます。ネストされたフィールドをドット表記なしで更新すると、マップ フィールド全体が上書きされます。次に例を示します。

    ウェブ
    
    // 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 version 9

    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 version 8

    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")
    });
    迅速
    注:この製品は、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+KTX

    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"]),
    });
    ジャワ
    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());
    パイソン
    city_ref = db.collection(u'cities').document(u'DC')
    
    # Atomically add a new region to the 'regions' array field.
    city_ref.update({u'regions': firestore.ArrayUnion([u'greater_virginia'])})
    
    # // Atomically remove a region from the 'regions' array field.
    city_ref.update({u'regions': firestore.ArrayRemove([u'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)
    });
    行け
    // 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'])]
    ]);
    団結
    // 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"));
    ルビー
    // Not supported yet
    

    数値をインクリメントする

    次の例に示すように、数値フィールドの値を増減できます。インクリメント操作は、指定された量だけフィールドの現在の値を増減します。

    Web version 9

    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 version 8

    var washingtonRef = db.collection('cities').doc('DC');
    
    // Atomically increment the population of the city by 50.
    washingtonRef.update({
        population: firebase.firestore.FieldValue.increment(50)
    });
    迅速
    注:この製品は、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+KTX

    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)},
    );
    ジャワ
    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));
    パイソン
    washington_ref = db.collection(u'cities').document(u'DC')
    
    washington_ref.update({"population": firestore.Increment(50)})

    Python

    washington_ref = db.collection("cities").document("DC")
    
    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)
    });
    行け
    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: %v", 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: %v", 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)]
    ]);
    団結
    // 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));
    ルビー
    city_ref = firestore.doc "#{collection_path}/DC"
    city_ref.update({ population: firestore.field_increment(50) })

    インクリメント操作はカウンターの実装に役立ちますが、1 つのドキュメントは 1 秒に 1 回しか更新できないことに注意してください。このレートを超えてカウンターを更新する必要がある場合は、分散カウンターのページを参照してください。