มีหลายวิธีในการเขียนข้อมูลไปยัง 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()
วัตถุประสงค์-C
@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 SDKimport 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 และผู้ดูแลระบบ > บัญชีบริการ ในคอนโซล 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 SDKimport 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 และผู้ดูแลระบบ > บัญชีบริการ ในคอนโซล 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 SDKimport 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 และผู้ดูแลระบบ > บัญชีบริการ ในคอนโซล 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();
โหนด 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 และผู้ดูแลระบบ > บัญชีบริการ ในคอนโซล 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 SDKimport ( "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 และผู้ดูแลระบบ > บัญชีบริการ ในคอนโซล 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 Client Libraries
ความสามัคคี
using Firebase.Firestore; using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
ค#
ค#
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ทับทิม
ตั้งค่าเอกสาร
หากต้องการสร้างหรือเขียนทับเอกสารเดียว ให้ใช้เมธอด 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!") } }
วัตถุประสงค์-C
ใช้เมธอด 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; } });
โหนด js
ใช้ set()
วิธีการ:
ไป
ใช้เมธอด Set()
:
PHP
ใช้ set()
วิธีการ:
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
ใช้เมธอด 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)
วัตถุประสงค์-C
// 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());
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
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!") } }
วัตถุประสงค์-C
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; } });
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
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 } }
วัตถุประสงค์-C
// This isn't supported in Objective-C.
Kotlin+KTX
data class City( val name: String? = null, val state: String? = null, val country: String? = null, @field:JvmField // use this annotation if your Boolean field is prefixed with 'is' val isCapital: Boolean? = null, val population: Long? = null, val regions: List<String>? = null, )
Java
แต่ละคลาสที่กำหนดเองจะต้องมีตัวสร้างสาธารณะที่ไม่มีข้อโต้แย้ง นอกจากนี้ คลาสต้องมี public getter สำหรับแต่ละคุณสมบัติ
public class City { private String name; private String state; private String country; private boolean capital; private long population; private List<String> regions; public City() {} public City(String name, String state, String country, boolean capital, long population, List<String> regions) { // ... } public String getName() { return name; } public String getState() { return state; } public String getCountry() { return country; } public boolean isCapital() { return capital; } public long getPopulation() { return population; } public List<String> getRegions() { return regions; } }
Dart
class City { final String? name; final String? state; final String? country; final bool? capital; final int? population; final List<String>? regions; City({ this.name, this.state, this.country, this.capital, this.population, this.regions, }); factory City.fromFirestore( DocumentSnapshot<Map<String, dynamic>> snapshot, SnapshotOptions? options, ) { final data = snapshot.data(); return City( name: data?['name'], state: data?['state'], country: data?['country'], capital: data?['capital'], population: data?['population'], regions: data?['regions'] is Iterable ? List.from(data?['regions']) : null, ); } Map<String, dynamic> toFirestore() { return { if (name != null) "name": name, if (state != null) "state": state, if (country != null) "country": country, if (capital != null) "capital": capital, if (population != null) "population": population, if (regions != null) "regions": regions, }; } }
ชวา
หลาม
Python
ซี++
// This is not yet supported.
โหนด js
// Node.js uses JavaScript objects
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
[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)") }
วัตถุประสงค์-C
// 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.
โหนด js
// Node.js uses JavaScript objects
ไป
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);
ค#
ทับทิม
// This isn't supported in Ruby.
เพิ่มเอกสาร
เมื่อคุณใช้ set()
เพื่อสร้างเอกสาร คุณต้องระบุ ID สำหรับเอกสารที่จะสร้าง ตัวอย่างเช่น:
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)
วัตถุประสงค์-C
[[[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*/});
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
db.Collection("cities").Document("new-city-id").SetAsync(city);
ค#
ทับทิม
แต่บางครั้งไม่มี ID ที่มีความหมายสำหรับเอกสาร และจะสะดวกกว่าถ้าปล่อยให้ Cloud Firestore สร้าง ID ให้คุณโดยอัตโนมัติ คุณสามารถทำได้โดยการเรียกเมธอด 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)") } }
วัตถุประสงค์-C
ใช้เมธอด 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*/});
โหนด js
ใช้ add()
วิธีการ:
ไป
ใช้ Add()
วิธีการ:
PHP
ใช้ add()
วิธีการ:
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
ใช้ 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()
วิธีการ:
ในบางกรณี การสร้างการอ้างอิงเอกสารด้วย ID ที่สร้างขึ้นอัตโนมัติอาจมีประโยชน์ จากนั้นจึงใช้การอ้างอิงในภายหลัง สำหรับกรณีการใช้งานนี้ คุณสามารถโทร 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([ // ... ])
วัตถุประสงค์-C
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();
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
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") } }
วัตถุประสงค์-C
ใช้เมธอด 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)}});
โหนด js
ใช้เมธอด update()
:
ไป
ใช้ Update()
วิธีการ:
PHP
ใช้เมธอด update()
:
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
ใช้เมธอด 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") } }
วัตถุประสงค์-C
[[[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) { // ... });
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
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") } }
วัตถุประสงค์-C
// 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")}, });
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
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"]) ])
วัตถุประสงค์-C
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.
โหนด js
ไป
// Not supported yet
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
// 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)) ])
วัตถุประสงค์-C
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.
โหนด js
ไป
PHP
PHP
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการสร้างไคลเอ็นต์ Cloud Firestore โปรดดูที่ Cloud Firestore Client Libraries
ความสามัคคี
// This is not yet supported in the Unity SDK.
ค#
ทับทิม
การดำเนินการเพิ่มมีประโยชน์สำหรับการนำตัวนับไปใช้ แต่โปรดจำไว้ว่าคุณสามารถอัปเดตเอกสารเดียวได้เพียงครั้งเดียวต่อวินาทีเท่านั้น หากคุณต้องการอัปเดตตัวนับของคุณให้สูงกว่าอัตรานี้ โปรดดูหน้า ตัวนับแบบกระจาย