Cloud Functions ช่วยให้คุณทําให้โค้ดใช้งานได้เพื่อจัดการเหตุการณ์ที่เรียกให้แสดงโดยการเปลี่ยนแปลงในฐานข้อมูล Cloud Firestore ซึ่งช่วยให้คุณเพิ่มฟังก์ชันการทำงานฝั่งเซิร์ฟเวอร์ลงในแอปได้อย่างง่ายดายโดยไม่ต้องเรียกใช้เซิร์ฟเวอร์ของคุณเอง
Cloud Functions (รุ่นที่ 2)
Cloud Functions for Firebase (รุ่นที่ 2) ขับเคลื่อนโดย Cloud Run และ Eventarc มอบโครงสร้างพื้นฐานที่มีประสิทธิภาพมากขึ้น การควบคุมขั้นสูงด้านประสิทธิภาพและความสามารถในการปรับขนาด รวมถึงการควบคุมรันไทม์ของฟังก์ชันได้มากขึ้น ดูข้อมูลเพิ่มเติมเกี่ยวกับรุ่นที่ 2 ได้ที่ Cloud Functions for Firebase (รุ่นที่ 2) หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับรุ่นที่ 1 แทน โปรดดูหัวข้อขยายความสามารถของ Cloud Firestore ด้วย Cloud Functions
ทริกเกอร์ฟังก์ชัน Cloud Firestore
Cloud Functions for Firebase SDK จะส่งออกCloud Firestoreทริกเกอร์เหตุการณ์ต่อไปนี้เพื่อให้คุณสร้างตัวแฮนเดิลที่เชื่อมโยงกับCloud Firestoreเหตุการณ์ที่เฉพาะเจาะจงได้
Node.js
ประเภทเหตุการณ์ | ทริกเกอร์ |
---|---|
onDocumentCreated |
ทริกเกอร์เมื่อมีการเขียนเอกสารเป็นครั้งแรก |
onDocumentUpdated |
ทริกเกอร์เมื่อเอกสารมีอยู่แล้วและมีการเปลี่ยนแปลงค่า |
onDocumentDeleted |
ทริกเกอร์เมื่อมีการลบเอกสาร |
onDocumentWritten |
ทริกเกอร์เมื่อมีการเรียกใช้ onDocumentCreated , onDocumentUpdated หรือ onDocumentDeleted |
onDocumentCreatedWithAuthContext |
onDocumentCreated พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
onDocumentWrittenWithAuthContext |
onDocumentWritten พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
onDocumentDeletedWithAuthContext |
onDocumentDeleted พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
onDocumentUpdatedWithAuthContext |
onDocumentUpdated พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
Python (เวอร์ชันตัวอย่าง)
ประเภทเหตุการณ์ | ทริกเกอร์ |
---|---|
on_document_created |
ทริกเกอร์เมื่อมีการเขียนเอกสารเป็นครั้งแรก |
on_document_updated |
ทริกเกอร์เมื่อเอกสารมีอยู่แล้วและมีการเปลี่ยนแปลงค่า |
on_document_deleted |
ทริกเกอร์เมื่อมีการลบเอกสาร |
on_document_written |
ทริกเกอร์เมื่อมีการเรียกใช้ on_document_created , on_document_updated หรือ on_document_deleted |
on_document_created_with_auth_context |
on_document_created พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
on_document_updated_with_auth_context |
on_document_updated พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
on_document_deleted_with_auth_context |
on_document_deleted พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
on_document_written_with_auth_context |
on_document_written พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
เหตุการณ์ Cloud Firestore จะทริกเกอร์เมื่อเอกสารมีการเปลี่ยนแปลงเท่านั้น การอัปเดตเอกสาร Cloud Firestore ที่ไม่มีการเปลี่ยนแปลงข้อมูล (การเขียนแบบไม่มีการดำเนินการ) จะไม่สร้างเหตุการณ์การอัปเดตหรือการเขียน คุณจะเพิ่มเหตุการณ์ลงในบางฟิลด์ไม่ได้
หากยังไม่ได้เปิดใช้โปรเจ็กต์สำหรับ Cloud Functions for Firebase โปรดอ่านหัวข้อเริ่มต้นใช้งาน Cloud Functions for Firebase (รุ่นที่ 2) เพื่อกำหนดค่าและตั้งค่าโปรเจ็กต์ Cloud Functions for Firebase
การเขียนฟังก์ชันที่เรียกใช้ Cloud Firestore
กําหนดทริกเกอร์ฟังก์ชัน
หากต้องการกําหนดทริกเกอร์ Cloud Firestore ให้ระบุเส้นทางเอกสารและประเภทเหตุการณ์ ดังนี้
Node.js
import {
onDocumentWritten,
onDocumentCreated,
onDocumentUpdated,
onDocumentDeleted,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("my-collection/{docId}", (event) => {
/* ... */
});
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_created,
on_document_deleted,
on_document_updated,
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_created(document="users/{userId}")
def myfunction(event: Event[DocumentSnapshot]) -> None:
เส้นทางเอกสารจะอ้างอิงเอกสารที่เฉพาะเจาะจงหรือรูปแบบไวลด์การ์ดก็ได้
ระบุเอกสารเดียว
หากต้องการทริกเกอร์เหตุการณ์สําหรับการเปลี่ยนแปลงใดๆ ในเอกสารที่เฉพาะเจาะจง ให้ใช้ฟังก์ชันต่อไปนี้
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("users/marie", (event) => {
// Your code here
});
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/marie")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
ระบุกลุ่มเอกสารโดยใช้ไวลด์การ์ด
หากต้องการแนบทริกเกอร์กับกลุ่มเอกสาร เช่น เอกสารในคอลเล็กชันหนึ่งๆ ให้ใช้ {wildcard}
แทนรหัสเอกสาร
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("users/{userId}", (event) => {
// If we set `/users/marie` to {name: "Marie"} then
// event.params.userId == "marie"
// ... and ...
// event.data.after.data() == {name: "Marie"}
});
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# If we set `/users/marie` to {name: "Marie"} then
event.params["userId"] == "marie" # True
# ... and ...
event.data.after.to_dict() == {"name": "Marie"} # True
ในตัวอย่างนี้ เมื่อฟิลด์ใดก็ตามในเอกสารใดก็ตามใน users
มีการเปลี่ยนแปลง ระบบจะจับคู่กับไวลด์การ์ดชื่อ userId
หากเอกสารใน users
มีคอลเล็กชันย่อยและมีการเปลี่ยนแปลงช่องในเอกสารของคอลเล็กชันย่อยรายการใดรายการหนึ่ง ระบบจะไม่เรียกใช้ไวลด์การ์ด userId
ระบบจะดึงการจับคู่ไวลด์การ์ดจากเส้นทางเอกสารและจัดเก็บไว้ใน event.params
คุณกำหนดไวลด์การ์ดได้มากเท่าที่ต้องการเพื่อแทนที่รหัสคอลเล็กชันหรือรหัสเอกสารที่ชัดเจน เช่น
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("users/{userId}/{messageCollectionId}/{messageId}", (event) => {
// If we set `/users/marie/incoming_messages/134` to {body: "Hello"} then
// event.params.userId == "marie";
// event.params.messageCollectionId == "incoming_messages";
// event.params.messageId == "134";
// ... and ...
// event.data.after.data() == {body: "Hello"}
});
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/{userId}/{messageCollectionId}/{messageId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# If we set `/users/marie/incoming_messages/134` to {body: "Hello"} then
event.params["userId"] == "marie" # True
event.params["messageCollectionId"] == "incoming_messages" # True
event.params["messageId"] == "134" # True
# ... and ...
event.data.after.to_dict() == {"body": "Hello"}
ทริกเกอร์ต้องชี้ไปยังเอกสารเสมอ แม้ว่าคุณจะใช้ไวลด์การ์ดก็ตาม
ตัวอย่างเช่น users/{userId}/{messageCollectionId}
ไม่ถูกต้องเนื่องจาก {messageCollectionId}
เป็นคอลเล็กชัน แต่ users/{userId}/{messageCollectionId}/{messageId}
ถูกต้องเนื่องจาก {messageId}
จะชี้ไปยังเอกสารเสมอ
ทริกเกอร์เหตุการณ์
ทริกเกอร์ฟังก์ชันเมื่อสร้างเอกสารใหม่
คุณสามารถทริกเกอร์ฟังก์ชันให้ทำงานทุกครั้งที่สร้างเอกสารใหม่ในคอลเล็กชัน ฟังก์ชันตัวอย่างนี้จะทริกเกอร์ทุกครั้งที่มีการเพิ่มโปรไฟล์ผู้ใช้ใหม่
Node.js
import {
onDocumentCreated,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.createuser = onDocumentCreated("users/{userId}", (event) => {
// Get an object representing the document
// e.g. {'name': 'Marie', 'age': 66}
const snapshot = event.data;
if (!snapshot) {
console.log("No data associated with the event");
return;
}
const data = snapshot.data();
// access a particular field as you would any JS property
const name = data.name;
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentCreatedWithAuthContext
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_created,
Event,
DocumentSnapshot,
)
@on_document_created(document="users/{userId}")
def myfunction(event: Event[DocumentSnapshot]) -> None:
# Get a dictionary representing the document
# e.g. {'name': 'Marie', 'age': 66}
new_value = event.data.to_dict()
# Access a particular field as you would any dictionary
name = new_value["name"]
# Perform more operations ...
ทริกเกอร์ฟังก์ชันเมื่อมีการอัปเดตเอกสาร
นอกจากนี้ คุณยังทริกเกอร์ฟังก์ชันให้ทำงานเมื่อมีการอัปเดตเอกสารได้ด้วย ฟังก์ชันตัวอย่างนี้จะทํางานหากผู้ใช้เปลี่ยนโปรไฟล์
Node.js
import {
onDocumentUpdated,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.updateuser = onDocumentUpdated("users/{userId}", (event) => {
// Get an object representing the document
// e.g. {'name': 'Marie', 'age': 66}
const newValue = event.data.after.data();
// access a particular field as you would any JS property
const name = newValue.name;
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentUpdatedWithAuthContext
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_updated,
Event,
Change,
DocumentSnapshot,
)
@on_document_updated(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get a dictionary representing the document
# e.g. {'name': 'Marie', 'age': 66}
new_value = event.data.after.to_dict()
# Access a particular field as you would any dictionary
name = new_value["name"]
# Perform more operations ...
ทริกเกอร์ฟังก์ชันเมื่อมีการลบเอกสาร
นอกจากนี้ คุณยังทริกเกอร์ฟังก์ชันเมื่อมีการลบเอกสารได้ด้วย ตัวอย่างฟังก์ชันนี้จะทํางานเมื่อผู้ใช้ลบโปรไฟล์ผู้ใช้
Node.js
import {
onDocumentDeleted,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.deleteuser = onDocumentDeleted("users/{userId}", (event) => {
// Get an object representing the document
// e.g. {'name': 'Marie', 'age': 66}
const snap = event.data;
const data = snap.data();
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentDeletedWithAuthContext
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_deleted,
Event,
DocumentSnapshot,
)
@on_document_deleted(document="users/{userId}")
def myfunction(event: Event[DocumentSnapshot|None]) -> None:
# Perform more operations ...
ทริกเกอร์ฟังก์ชันสําหรับการเปลี่ยนแปลงทั้งหมดในเอกสาร
หากไม่สนใจประเภทของเหตุการณ์ที่เริ่มทํางาน คุณสามารถรอฟังการเปลี่ยนแปลงทั้งหมดในเอกสาร Cloud Firestore โดยใช้ทริกเกอร์เหตุการณ์ "เขียนเอกสาร" ฟังก์ชันตัวอย่างนี้จะทํางานหากมีการสร้าง อัปเดต หรือลบผู้ใช้
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.modifyuser = onDocumentWritten("users/{userId}", (event) => {
// Get an object with the current document values.
// If the document does not exist, it was deleted
const document = event.data.after.data();
// Get an object with the previous document values
const previousValues = event.data.before.data();
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentWrittenWithAuthContext
Python (เวอร์ชันตัวอย่าง)
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot | None]]) -> None:
# Get an object with the current document values.
# If the document does not exist, it was deleted.
document = (event.data.after.to_dict()
if event.data.after is not None else None)
# Get an object with the previous document values.
# If the document does not exist, it was newly created.
previous_values = (event.data.before.to_dict()
if event.data.before is not None else None)
# Perform more operations ...
การอ่านและเขียนข้อมูล
เมื่อทริกเกอร์ฟังก์ชัน ระบบจะแสดงภาพรวมของข้อมูลที่เกี่ยวข้องกับเหตุการณ์ คุณสามารถใช้ภาพรวมนี้เพื่ออ่านหรือเขียนลงในเอกสารที่ทริกเกอร์เหตุการณ์ หรือใช้ Firebase Admin SDK เพื่อเข้าถึงส่วนอื่นๆ ของฐานข้อมูล
ข้อมูลเหตุการณ์
การอ่านข้อมูล
เมื่อทริกเกอร์ฟังก์ชัน คุณอาจต้องการรับข้อมูลจากเอกสารที่อัปเดตแล้ว หรือรับข้อมูลก่อนการอัปเดต คุณดูข้อมูลก่อนหน้าได้โดยใช้ event.data.before
ซึ่งมีสแนปชอตเอกสารก่อนการอัปเดต
ในทำนองเดียวกัน event.data.after
มีสถานะสแนปชอตเอกสารหลังจากการอัปเดต
Node.js
exports.updateuser2 = onDocumentUpdated("users/{userId}", (event) => {
// Get an object with the current document values.
// If the document does not exist, it was deleted
const newValues = event.data.after.data();
// Get an object with the previous document values
const previousValues = event.data.before.data();
});
Python (เวอร์ชันตัวอย่าง)
@on_document_updated(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get an object with the current document values.
new_value = event.data.after.to_dict()
# Get an object with the previous document values.
prev_value = event.data.before.to_dict()
คุณสามารถเข้าถึงพร็อพเพอร์ตี้ได้เช่นเดียวกับในออบเจ็กต์อื่นๆ หรือจะใช้ฟังก์ชัน get
เพื่อเข้าถึงช่องที่เฉพาะเจาะจงก็ได้
Node.js
// Fetch data using standard accessors
const age = event.data.after.data().age;
const name = event.data.after.data()['name'];
// Fetch data using built in accessor
const experience = event.data.after.data.get('experience');
Python (เวอร์ชันตัวอย่าง)
# Get the value of a single document field.
age = event.data.after.get("age")
# Convert the document to a dictionary.
age = event.data.after.to_dict()["age"]
การเขียนข้อมูล
การเรียกใช้ฟังก์ชันแต่ละรายการจะเชื่อมโยงกับเอกสารที่เฉพาะเจาะจงในฐานข้อมูลCloud Firestore คุณสามารถเข้าถึงเอกสารดังกล่าวในสแนปชอตที่แสดงผลในฟังก์ชัน
การอ้างอิงเอกสารจะมีเมธอดต่างๆ เช่น update()
, set()
และ remove()
เพื่อให้คุณแก้ไขเอกสารที่ทริกเกอร์ฟังก์ชันได้
Node.js
import { onDocumentUpdated } from "firebase-functions/v2/firestore";
exports.countnamechanges = onDocumentUpdated('users/{userId}', (event) => {
// Retrieve the current and previous value
const data = event.data.after.data();
const previousData = event.data.before.data();
// We'll only update if the name has changed.
// This is crucial to prevent infinite loops.
if (data.name == previousData.name) {
return null;
}
// Retrieve the current count of name changes
let count = data.name_change_count;
if (!count) {
count = 0;
}
// Then return a promise of a set operation to update the count
return data.after.ref.set({
name_change_count: count + 1
}, {merge: true});
});
Python (เวอร์ชันตัวอย่าง)
@on_document_updated(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get the current and previous document values.
new_value = event.data.after
prev_value = event.data.before
# We'll only update if the name has changed.
# This is crucial to prevent infinite loops.
if new_value.get("name") == prev_value.get("name"):
return
# Retrieve the current count of name changes
count = new_value.to_dict().get("name_change_count", 0)
# Update the count
new_value.reference.update({"name_change_count": count + 1})
เข้าถึงข้อมูลการตรวจสอบสิทธิ์ของผู้ใช้
หากใช้เหตุการณ์ประเภทใดประเภทหนึ่งต่อไปนี้ คุณจะเข้าถึงข้อมูลการตรวจสอบสิทธิ์ผู้ใช้เกี่ยวกับผู้ใช้หลักที่ทริกเกอร์เหตุการณ์ได้ ข้อมูลนี้นอกเหนือจากข้อมูลที่แสดงในเหตุการณ์พื้นฐาน
Node.js
onDocumentCreatedWithAuthContext
onDocumentWrittenWithAuthContext
onDocumentDeletedWithAuthContext
onDocumentUpdatedWithAuthContext
Python (เวอร์ชันตัวอย่าง)
on_document_created_with_auth_context
on_document_updated_with_auth_context
on_document_deleted_with_auth_context
on_document_written_with_auth_context
ดูข้อมูลเกี่ยวกับข้อมูลที่มีอยู่ในบริบทการตรวจสอบสิทธิ์ได้ที่หัวข้อบริบทการตรวจสอบสิทธิ์ ตัวอย่างต่อไปนี้แสดงวิธีเรียกข้อมูลการตรวจสอบสิทธิ์
Node.js
import { onDocumentWrittenWithAuthContext } from "firebase-functions/v2/firestore"
exports.syncUser = onDocumentWrittenWithAuthContext("users/{userId}", (event) => {
const snapshot = event.data.after;
if (!snapshot) {
console.log("No data associated with the event");
return;
}
const data = snapshot.data();
// retrieve auth context from event
const { authType, authId } = event;
let verified = false;
if (authType === "system") {
// system-generated users are automatically verified
verified = true;
} else if (authType === "unknown" || authType === "unauthenticated") {
// admin users from a specific domain are verified
if (authId.endsWith("@example.com")) {
verified = true;
}
}
return data.after.ref.set({
created_by: authId,
verified,
}, {merge: true});
});
Python (เวอร์ชันตัวอย่าง)
@on_document_updated_with_auth_context(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get the current and previous document values.
new_value = event.data.after
prev_value = event.data.before
# Get the auth context from the event
user_auth_type = event.auth_type
user_auth_id = event.auth_id
ข้อมูลนอกเหตุการณ์ทริกเกอร์
Cloud Functions ทำงานในสภาพแวดล้อมที่เชื่อถือได้ โดยผู้ใช้เหล่านี้จะได้รับสิทธิ์เป็นบัญชีบริการในโปรเจ็กต์ และคุณจะอ่านและเขียนได้โดยใช้ Firebase Admin SDK
Node.js
const { initializeApp } = require('firebase-admin/app');
const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
initializeApp();
const db = getFirestore();
exports.writetofirestore = onDocumentWritten("some/doc", (event) => {
db.doc('some/otherdoc').set({ ... });
});
exports.writetofirestore = onDocumentWritten('users/{userId}', (event) => {
db.doc('some/otherdoc').set({
// Update otherdoc
});
});
Python (เวอร์ชันตัวอย่าง)
from firebase_admin import firestore, initialize_app
import google.cloud.firestore
initialize_app()
@on_document_written(document="some/doc")
def myfunction(event: Event[Change[DocumentSnapshot | None]]) -> None:
firestore_client: google.cloud.firestore.Client = firestore.client()
firestore_client.document("another/doc").set({
# ...
})
ข้อจำกัด
โปรดทราบข้อจำกัดต่อไปนี้สำหรับทริกเกอร์ Cloud Firestore สำหรับ Cloud Functions
- Cloud Functions (รุ่นที่ 1) ต้องมีฐานข้อมูล "(default)" ที่มีอยู่เดิมในโหมดเนทีฟของ Firestore แต่ไม่รองรับCloud Firestoreฐานข้อมูลที่ชื่อหรือโหมด Datastore โปรดใช้ Cloud Functions (รุ่นที่ 2) เพื่อกําหนดค่าเหตุการณ์ในกรณีดังกล่าว
- เราไม่รับประกันการสั่งซื้อ การเปลี่ยนแปลงอย่างรวดเร็วอาจทริกเกอร์การเรียกใช้ฟังก์ชันในลําดับที่ไม่คาดคิด
- ระบบจะส่งเหตุการณ์อย่างน้อย 1 ครั้ง แต่เหตุการณ์เดียวอาจส่งผลให้มีการเรียกใช้ฟังก์ชันหลายครั้ง หลีกเลี่ยงการพึ่งพากลไก "ดำเนินการเพียงครั้งเดียว" และเขียนฟังก์ชันที่ทำงานแบบ idempotent
- Cloud Firestore ในโหมด Datastoreต้องใช้ Cloud Functions (รุ่นที่ 2) Cloud Functions (รุ่นที่ 1) ไม่รองรับโหมด Datastore
- ทริกเกอร์จะเชื่อมโยงกับฐานข้อมูลเดียว คุณสร้างทริกเกอร์ที่ตรงกับฐานข้อมูลหลายรายการไม่ได้
- การลบฐานข้อมูลจะไม่ลบทริกเกอร์ของฐานข้อมูลนั้นโดยอัตโนมัติ ทริกเกอร์จะหยุดส่งเหตุการณ์ แต่จะยังคงอยู่จนกว่าคุณจะลบทริกเกอร์
- หากเหตุการณ์ที่ตรงกันมีขนาดใหญ่เกินขนาดคำขอสูงสุด ระบบอาจไม่ส่งเหตุการณ์ไปยัง Cloud Functions (รุ่นที่ 1)
- ระบบจะบันทึกเหตุการณ์ที่ส่งไม่ได้เนื่องจากขนาดคำขอไว้ในบันทึกของแพลตฟอร์ม และนับรวมไว้ในการใช้งานบันทึกของโปรเจ็กต์
- คุณดูบันทึกเหล่านี้ได้ในเครื่องมือสำรวจบันทึกที่มีข้อความ "ส่งเหตุการณ์ไปยังฟังก์ชัน Cloud ไม่ได้เนื่องจากมีขนาดใหญ่เกินขีดจํากัดของรุ่นที่ 1..." ความรุนแรงระดับ
error
คุณจะเห็นชื่อฟังก์ชันใต้ช่องfunctionName
หากช่องreceiveTimestamp
ยังอยู่ภายใน 1 ชั่วโมงนับจากนี้ คุณสามารถอนุมานเนื้อหาเหตุการณ์จริงได้โดยอ่านเอกสารที่เป็นปัญหาพร้อมภาพหน้าจอก่อนและหลังการประทับเวลา - คุณหลีกเลี่ยงจังหวะดังกล่าวได้โดยทำดังนี้
- ย้ายข้อมูลและอัปเกรดเป็น Cloud Functions (รุ่นที่ 2)
- ลดขนาดเอกสาร
- ลบ Cloud Functions ที่เป็นปัญหา
- คุณสามารถปิดการบันทึกได้โดยใช้การยกเว้น แต่โปรดทราบว่าระบบจะยังคงไม่ส่งเหตุการณ์ที่ทำให้เกิดข้อผิดพลาด