هناك عدة طرق لكتابة البيانات إلى Cloud Firestore:
- قم بتعيين بيانات مستند ضمن مجموعة، مع تحديد معرف المستند بشكل صريح.
- إضافة مستند جديد إلى المجموعة. في هذه الحالة، يقوم Cloud Firestore تلقائيًا بإنشاء معرف المستند.
- أنشئ مستندًا فارغًا بمعرف تم إنشاؤه تلقائيًا، وقم بتعيين البيانات إليه لاحقًا.
يشرح هذا الدليل كيفية استخدام مجموعة المستندات الفردية أو إضافتها أو تحديثها في Cloud Firestore. إذا كنت تريد كتابة البيانات بشكل مجمع، راجع المعاملات وعمليات الكتابة المجمعة .
قبل ان تبدأ
راجع بدء استخدام Cloud Firestore لإنشاء قاعدة بيانات Cloud Firestore.تهيئة Cloud Firestore
تهيئة مثيل Cloud Firestore:
Web modular API
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = { FIREBASE_CONFIGURATION }; // Initialize Firebase const app = initializeApp(firebaseConfig); // Initialize Cloud Firestore and get a reference to the service const db = getFirestore(app);
استبدل FIREBASE_CONFIGURATION بـ firebaseConfig
الخاص بتطبيق الويب الخاص بك.
للاحتفاظ بالبيانات عندما يفقد الجهاز اتصاله، راجع وثائق تمكين البيانات دون اتصال .
Web namespaced API
import firebase from "firebase/app"; import "firebase/firestore"; // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = { FIREBASE_CONFIGURATION }; // Initialize Firebase firebase.initializeApp(firebaseConfig); // Initialize Cloud Firestore and get a reference to the service const db = firebase.firestore();
استبدل FIREBASE_CONFIGURATION بـ firebaseConfig
الخاص بتطبيق الويب الخاص بك.
للاحتفاظ بالبيانات عندما يفقد الجهاز اتصاله، راجع وثائق تمكين البيانات دون اتصال .
سويفت
import FirebaseCore import FirebaseFirestore
FirebaseApp.configure() let db = Firestore.firestore()
ج موضوعية
@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 بطرق مختلفة حسب البيئة الخاصة بك. وفيما يلي الأساليب الأكثر شيوعا. للحصول على مرجع كامل، راجع تهيئة Admin SDK .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 بطرق مختلفة حسب البيئة الخاصة بك. وفيما يلي الأساليب الأكثر شيوعا. للحصول على مرجع كامل، راجع تهيئة Admin SDK .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 بطرق مختلفة حسب البيئة الخاصة بك. وفيما يلي الأساليب الأكثر شيوعا. للحصول على مرجع كامل، راجع تهيئة Admin SDK .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()
سي ++
// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance(). App::Create(); Firestore* db = Firestore::GetInstance();
Node.js
تتم تهيئة Cloud Firestore SDK بطرق مختلفة حسب البيئة الخاصة بك. وفيما يلي الأساليب الأكثر شيوعا. للحصول على مرجع كامل، راجع تهيئة Admin SDK .- التهيئة في الوظائف السحابية
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 بطرق مختلفة حسب البيئة الخاصة بك. وفيما يلي الأساليب الأكثر شيوعا. للحصول على مرجع كامل، راجع تهيئة Admin SDK .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()
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
using Firebase.Firestore; using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
ج#
ج#
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
روبي
قم بتعيين مستند
لإنشاء مستند واحد أو الكتابة فوقه، استخدم طرق set()
التالية الخاصة باللغة:
Web modular API
استخدم طريقة 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 namespaced API
استخدم طريقة 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()
:
// Add a new document in collection "cities" db.collection("cities").document("LA").setData([ "name": "Los Angeles", "state": "CA", "country": "USA" ]) { err in if let err = err { print("Error writing document: \(err)") } else { print("Document successfully written!") } }
ج موضوعية
استخدم طريقة setData:
:
// 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()
:
بايثون
استخدم طريقة set()
:
Python
استخدم طريقة set()
:
سي ++
استخدم طريقة 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()
:
يذهب
استخدم طريقة Set()
:
بي أتش بي
استخدم طريقة set()
:
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
استخدم طريقة 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()
:
روبي
استخدم طريقة set()
:
إذا لم يكن المستند موجودًا، فسيتم إنشاؤه. إذا كان المستند موجودًا، فسيتم استبدال محتوياته بالبيانات المقدمة حديثًا، ما لم تحدد ضرورة دمج البيانات في المستند الموجود، كما يلي:
Web modular API
import { doc, setDoc } from "firebase/firestore"; const cityRef = doc(db, 'cities', 'BJ'); setDoc(cityRef, { capital: true }, { merge: true });
Web namespaced API
var cityRef = db.collection('cities').doc('BJ'); var setWithMerge = cityRef.set({ capital: true }, { merge: true });
سويفت
// Update one field, creating the document if it does not exist. db.collection("cities").document("BJ").setData([ "capital": true ], merge: true)
ج موضوعية
// 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));
جافا
بايثون
Python
سي ++
db->Collection("cities").Document("BJ").Set( {{"capital", FieldValue::Boolean(true)}}, SetOptions::Merge());
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
DocumentReference docRef = db.Collection("cities").Document("LA"); Dictionary<string, object> update = new Dictionary<string, object> { { "capital", false } }; docRef.SetAsync(update, SetOptions.MergeAll);
ج #
روبي
إذا لم تكن متأكدًا من وجود المستند أم لا، فمرر خيار دمج البيانات الجديدة مع أي مستند موجود لتجنب الكتابة فوق المستندات بأكملها. بالنسبة للمستندات التي تحتوي على خرائط، لاحظ أن تحديد مجموعة بحقل يحتوي على خريطة فارغة سيؤدي إلى استبدال حقل خريطة المستند المستهدف.
أنواع البيانات
يتيح لك Cloud Firestore كتابة مجموعة متنوعة من أنواع البيانات داخل المستند، بما في ذلك السلاسل والقيم المنطقية والأرقام والتواريخ والصفائف والكائنات الخالية والمتداخلة. يقوم Cloud Firestore دائمًا بتخزين الأرقام كأرقام مزدوجة، بغض النظر عن نوع الرقم الذي تستخدمه في التعليمات البرمجية الخاصة بك.
Web modular API
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 namespaced API
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!"); });
سويفت
let docData: [String: Any] = [ "stringExample": "Hello world!", "booleanExample": true, "numberExample": 3.14159265, "dateExample": Timestamp(date: Date()), "arrayExample": [5, true, "hello"], "nullExample": NSNull(), "objectExample": [ "a": 5, "b": [ "nested": "foo" ] ] ] db.collection("data").document("one").setData(docData) { err in if let err = err { print("Error writing document: \(err)") } else { print("Document successfully written!") } }
ج موضوعية
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"));
جافا
بايثون
Python
سي ++
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
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
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);
ج #
روبي
كائنات مخصصة
غالبًا ما لا يكون استخدام كائنات Map
أو Dictionary
لتمثيل مستنداتك أمرًا مريحًا للغاية، لذا يدعم Cloud Firestore كتابة المستندات بفئات مخصصة. يقوم Cloud Firestore بتحويل الكائنات إلى أنواع البيانات المدعومة.
باستخدام الفئات المخصصة، يمكنك إعادة كتابة المثال الأولي كما هو موضح:
Web modular API
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 namespaced API
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); } };
سويفت
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 } }
ج موضوعية
// 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, }; } }
جافا
بايثون
Python
سي ++
// This is not yet supported.
Node.js
// Node.js uses JavaScript objects
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
[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 modular API
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 namespaced API
// Set with cityConverter db.collection("cities").doc("LA") .withConverter(cityConverter) .set(new City("Los Angeles", "CA", "USA"));
سويفت
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)") }
ج موضوعية
// 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);
جافا
بايثون
Python
سي ++
// This is not yet supported.
Node.js
// Node.js uses JavaScript objects
يذهب
بي أتش بي
// 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);
ج #
روبي
// This isn't supported in Ruby.
أضف مستندًا
عند استخدام set()
لإنشاء مستند، يجب عليك تحديد معرف للمستند المراد إنشاؤه. على سبيل المثال:
Web modular API
import { doc, setDoc } from "firebase/firestore"; await setDoc(doc(db, "cities", "new-city-id"), data);
Web namespaced API
db.collection("cities").doc("new-city-id").set(data);
سويفت
db.collection("cities").document("new-city-id").setData(data)
ج موضوعية
[[[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"});
جافا
بايثون
Python
سي ++
db->Collection("cities").Document("SF").Set({/*some data*/});
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
db.Collection("cities").Document("new-city-id").SetAsync(city);
ج#
روبي
لكن في بعض الأحيان لا يوجد معرف ذو معنى للمستند، ومن الأفضل السماح لـ Cloud Firestore بإنشاء معرف لك تلقائيًا. يمكنك القيام بذلك عن طريق استدعاء أساليب add()
التالية الخاصة باللغة:
Web modular API
استخدم طريقة 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 namespaced API
استخدم طريقة 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()
:
// Add a new document with a generated id. var ref: DocumentReference? = nil ref = db.collection("cities").addDocument(data: [ "name": "Tokyo", "country": "Japan" ]) { err in if let err = err { print("Error adding document: \(err)") } else { print("Document added with ID: \(ref!.documentID)") } }
ج موضوعية
استخدم طريقة addDocumentWithData:
:
// 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()
:
Python
استخدم طريقة add()
:
سي ++
استخدم طريقة Add()
:
db->Collection("cities").Add({/*some data*/});
Node.js
استخدم طريقة add()
:
يذهب
استخدم طريقة Add()
:
بي أتش بي
استخدم طريقة add()
:
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
استخدم طريقة 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()
:
روبي
استخدم طريقة add()
:
في بعض الحالات، قد يكون من المفيد إنشاء مرجع مستند بمعرف تم إنشاؤه تلقائيًا، ثم استخدام المرجع لاحقًا. بالنسبة لحالة الاستخدام هذه، يمكنك الاتصال بـ doc()
:
Web modular API
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 namespaced API
// Add a new document with a generated id. var newCityRef = db.collection("cities").doc(); // later... newCityRef.set(data);
سويفت
let newCityRef = db.collection("cities").document() // later... newCityRef.setData([ // ... ])
ج موضوعية
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);
جافا
بايثون
Python
سي ++
DocumentReference new_city_ref = db->Collection("cities").Document();
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
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)); });
ج #
روبي
خلف الكواليس، .add(...)
و .doc().set(...)
متساويان تمامًا، لذا يمكنك استخدام أيهما أكثر ملاءمة.
تحديث مستند
لتحديث بعض حقول المستند دون الكتابة فوق المستند بأكمله، استخدم طرق update()
التالية الخاصة باللغة:
Web modular API
استخدم طريقة 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 namespaced API
استخدم طريقة 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()
:
let washingtonRef = db.collection("cities").document("DC") // Set the "capital" field of the city 'DC' washingtonRef.updateData([ "capital": true ]) { err in if let err = err { print("Error updating document: \(err)") } else { print("Document successfully updated") } }
ج موضوعية
استخدم updateData:
الطريقة:
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()
:
Python
استخدم طريقة update()
:
سي ++
استخدم طريقة 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()
:
يذهب
استخدم طريقة Update()
:
بي أتش بي
استخدم طريقة update()
:
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
استخدم طريقة 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()
:
روبي
استخدم طريقة update()
:
الطابع الزمني للخادم
يمكنك تعيين حقل في مستندك إلى طابع زمني للخادم يتتبع متى يتلقى الخادم التحديث.
Web modular API
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 namespaced API
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() });
سويفت
db.collection("objects").document("some-id").updateData([ "lastUpdated": FieldValue.serverTimestamp(), ]) { err in if let err = err { print("Error updating document: \(err)") } else { print("Document successfully updated") } }
ج موضوعية
[[[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"));
جافا
بايثون
Python
سي ++
DocumentReference doc_ref = db->Collection("objects").Document("some-id"); doc_ref.Update({{"timestamp", FieldValue::ServerTimestamp()}}) .OnCompletion([](const Future<void>& future) { // ... });
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
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."); });
ج #
روبي
عند تحديث حقول طابع زمني متعددة داخل المعاملة ، يتلقى كل حقل نفس قيمة الطابع الزمني للخادم.
تحديث الحقول في الكائنات المتداخلة
إذا كان المستند الخاص بك يحتوي على كائنات متداخلة، فيمكنك استخدام "التدوين النقطي" للإشارة إلى الحقول المتداخلة داخل المستند عند استدعاء update()
:
Web modular API
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 namespaced API
// 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!"); });
سويفت
// Create an initial document to update. let frankDocRef = db.collection("users").document("frank") frankDocRef.setData([ "name": "Frank", "favorites": [ "food": "Pizza", "color": "Blue", "subject": "recess" ], "age": 12 ]) // To update age and favorite color: db.collection("users").document("frank").updateData([ "age": 13, "favorites.color": "Red" ]) { err in if let err = err { print("Error updating document: \(err)") } else { print("Document successfully updated") } }
ج موضوعية
// 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"});
جافا
بايثون
Python
سي ++
// 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
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
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."); });
ج #
روبي
يسمح لك التدوين النقطي بتحديث حقل متداخل واحد دون الكتابة فوق حقل متداخل آخر. إذا قمت بتحديث حقل متداخل بدون علامة نقطية، فسوف تقوم بالكتابة فوق حقل الخريطة بأكمله، على سبيل المثال:
ويب
// 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 modular API
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 namespaced API
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") });
سويفت
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"]) ])
ج موضوعية
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"]), });
جافا
بايثون
Python
سي ++
// This is not yet supported.
Node.js
يذهب
// Not supported yet
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
// This is not yet supported in the Unity SDK
ج#
روبي
// Not supported yet
زيادة قيمة رقمية
يمكنك زيادة أو إنقاص قيمة حقل رقمية كما هو موضح في المثال التالي. تؤدي عملية الزيادة إلى زيادة القيمة الحالية للحقل أو تقليلها بمقدار المبلغ المحدد.
Web modular API
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 namespaced API
var washingtonRef = db.collection('cities').doc('DC'); // Atomically increment the population of the city by 50. washingtonRef.update({ population: firebase.firestore.FieldValue.increment(50) });
سويفت
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)) ])
ج موضوعية
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)}, );
جافا
بايثون
Python
سي ++
// This is not yet supported.
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
// This is not yet supported in the Unity SDK.
ج #
روبي
تعد عمليات الزيادة مفيدة لتنفيذ العدادات، ولكن ضع في اعتبارك أنه يمكنك تحديث مستند واحد مرة واحدة فقط في الثانية. إذا كنت بحاجة إلى تحديث العداد الخاص بك أعلى من هذا المعدل، راجع صفحة العدادات الموزعة .