داده ها را به 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);

firebaseConfig برنامه وب خود را جایگزین FIREBASE_CONFIGURATION کنید.

برای تداوم داده‌ها وقتی دستگاه اتصال خود را قطع می‌کند، به مستندات Enable Data Offline مراجعه کنید.

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();

firebaseConfig برنامه وب خود را جایگزین FIREBASE_CONFIGURATION کنید.

برای تداوم داده‌ها وقتی دستگاه اتصال خود را قطع می‌کند، به مستندات Enable Data Offline مراجعه کنید.

سویفت
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
import FirebaseCore
import FirebaseFirestore
FirebaseApp.configure()

let db = Firestore.firestore()
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
@import FirebaseCore;
@import FirebaseFirestore;

// Use Firebase library to configure APIs
[FIRApp configure];
  
FIRFirestore *defaultFirestore = [FIRFirestore firestore];

Kotlin+KTX

// 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;
جاوا
بسته به محیط شما، Cloud Firestore SDK به روش های مختلفی مقداردهی اولیه می شود. در زیر رایج ترین روش ها آورده شده است. برای یک مرجع کامل، به Initialize the 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 در سرور خود، از یک حساب سرویس استفاده کنید.

    به IAM & admin > حساب‌های سرویس در کنسول Google Cloud بروید. یک کلید خصوصی جدید ایجاد کنید و فایل 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 به روش های مختلفی مقداردهی اولیه می شود. در زیر رایج ترین روش ها آورده شده است. برای یک مرجع کامل، به Initialize the 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 در سرور خود، از یک حساب سرویس استفاده کنید.

    به IAM & admin > حساب‌های سرویس در کنسول Google Cloud بروید. یک کلید خصوصی جدید ایجاد کنید و فایل 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 به روش های مختلفی مقداردهی اولیه می شود. در زیر رایج ترین روش ها آورده شده است. برای یک مرجع کامل، به Initialize the 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 در سرور خود، از یک حساب سرویس استفاده کنید.

    به IAM & admin > حساب‌های سرویس در کنسول Google Cloud بروید. یک کلید خصوصی جدید ایجاد کنید و فایل 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 به روش های مختلفی مقداردهی اولیه می شود. در زیر رایج ترین روش ها آورده شده است. برای یک مرجع کامل، به Initialize the 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();
    • بر روی سرور خود راه اندازی کنید

      برای استفاده از Firebase Admin SDK در سرور خود (یا هر محیط Node.js دیگری)، از یک حساب سرویس استفاده کنید. به IAM & admin > حساب‌های سرویس در کنسول Google Cloud بروید. یک کلید خصوصی جدید ایجاد کنید و فایل 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();
      
    برو
    بسته به محیط شما، Cloud Firestore SDK به روش های مختلفی مقداردهی اولیه می شود. در زیر رایج ترین روش ها آورده شده است. برای یک مرجع کامل، به Initialize the 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 در سرور خود، از یک حساب سرویس استفاده کنید.

    به IAM & admin > حساب‌های سرویس در کنسول Google Cloud بروید. یک کلید خصوصی جدید ایجاد کنید و فایل 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;
    سی شارپ

    سی شارپ

    برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت 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."

    یک سند تنظیم کنید

    برای ایجاد یا بازنویسی یک سند واحد، از متدهای 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);
    });
    سویفت

    از متد 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)")
    }
    هدف-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 = {"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);
    برو

    از متد 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);
    وحدت

    از متد 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.");
    });
    سی شارپ

    از متد 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

    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 });
    سویفت
    توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
    // Update one field, creating the document if it does not exist.
    db.collection("cities").document("BJ").setData([ "capital": true ], merge: true)
    هدف-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("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 });
    برو
    
    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]);
    وحدت
    DocumentReference docRef = db.Collection("cities").Document("LA");
    Dictionary<string, object> update = new Dictionary<string, object>
    {
    	{ "capital", false }
    };
    docRef.SetAsync(update, SetOptions.MergeAll);
    سی شارپ
    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 به شما امکان می دهد انواع داده ها را در داخل یک سند بنویسید، از جمله رشته ها، بولی ها، اعداد، تاریخ ها، آرایه ها و اشیاء تهی و تودرتو. 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!");
    });
    سویفت
    توجه: این محصول در اهداف 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)")
    }
    هدف-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 = {
        "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);
    برو
    
    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);
    وحدت
    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);
    سی شارپ
    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);
    روبی
    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);
        }
    };
    سویفت
    توجه: این محصول در اهداف 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
      }
    
    }
    هدف-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 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:
        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
    
    برو
    
    // 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
            # ...
        }
    }
    
    وحدت
    [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; }
    }
    سی شارپ
    [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

    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"));
    سویفت
    توجه: این محصول در اهداف 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)")
    }
    هدف-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="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
    
    برو
    
    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.
    
    وحدت
    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);
    سی شارپ
    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() برای ایجاد یک سند استفاده می کنید، باید یک شناسه برای ایجاد سند مشخص کنید، همانطور که در مثال زیر نشان داده شده است:

    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);
    سویفت
    توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
    db.collection("cities").document("new-city-id").setData(data)
    هدف-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("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);
    برو
    
    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);
    وحدت
    db.Collection("cities").Document("new-city-id").SetAsync(city);
    سی شارپ
    await db.Collection("cities").Document("new-city-id").SetAsync(city);
    روبی
    city_ref = firestore.doc "#{collection_path}/new-city-id"
    city_ref.set data

    اگر شناسه معنی‌داری برای سند وجود نداشته باشد، Cloud Firestore می‌تواند به‌طور خودکار یک شناسه برای شما ایجاد کند. می توانید متدهای 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);
    });
    سویفت

    از متد 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)")
    }
    هدف-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 = {"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);
    برو

    از متد 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());
    وحدت

    از متد 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));
    });
    سی شارپ

    از متد 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}."

    در برخی موارد، ایجاد یک مرجع سند با شناسه ای که به طور خودکار تولید می شود، می تواند مفید باشد، سپس بعداً از مرجع استفاده کنید. برای این مورد استفاده، می توانید 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);
    سویفت
    توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
    let newCityRef = db.collection("cities").document()
    
    // later...
    newCityRef.setData([
      // ...
    ])
    هدف-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("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({
      // ...
    });
    برو
    
    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);
    وحدت
    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));
    });
    سی شارپ
    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

    در backend، .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);
    });
    سویفت

    از متد 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)")
    }
    هدف-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("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});
    برو

    از متد 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]
    ]);
    وحدت

    از متد 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);
    سی شارپ

    از متد 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

    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()
    });
    سویفت
    توجه: این محصول در اهداف 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)")
    }
    هدف-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("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()
    });
    برو
    
    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()]
    ]);
    وحدت
    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.");
    	});
    سی شارپ
    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 })

    هنگام به روز رسانی چندین فیلد مُهر زمان در داخل یک تراکنش ، هر فیلد همان مقدار مهر زمانی سرور را دریافت می کند.

    فیلدها را در اشیاء تودرتو به روز کنید

    اگر سند شما حاوی اشیاء تودرتو است، می‌توانید هنگام فراخوانی 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!");
    });
    سویفت
    توجه: این محصول در اهداف 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)")
    }
    هدف-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("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'
    });
    برو
    
    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']
    ]);
    وحدت
    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.");
    });
    سی شارپ
    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

    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")
    });
    سویفت
    توجه: این محصول در اهداف 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"])
    ])
    هدف-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("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)
    });
    برو
    // 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
      
    سی شارپ
    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

    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)
    });
    سویفت
    توجه: این محصول در اهداف 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))
    ])
    هدف-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("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)
    });
    برو
    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)]
    ]);
    وحدت
    // This is not yet supported in the Unity SDK.
      
    سی شارپ
    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) })

    عملیات افزایشی برای پیاده سازی شمارنده ها مفید است. توجه داشته باشید که به‌روزرسانی سریع یک سند می‌تواند منجر به مشاجره یا خطا شود . اگر می خواهید پیشخوان خود را با سرعت بسیار بالا به روز کنید، به صفحه شمارنده های توزیع شده مراجعه کنید.