Cloud Functions की मदद से Cloud Firestore का दायरा बढ़ाना (2nd gen)

Cloud Functions की मदद से, कोड को डिप्लॉय किया जा सकता है. इससे Cloud Firestore डेटाबेस में हुए बदलावों से ट्रिगर होने वाले इवेंट को मैनेज किया जा सकता है. इससे, अपने सर्वर चलाए बिना ही, अपने ऐप्लिकेशन में सर्वर-साइड फ़ंक्शनैलिटी को आसानी से जोड़ा जा सकता है.

Cloud Functions (2nd gen)

Cloud Run और Eventarc की मदद से काम करने वाला Cloud Functions for Firebase (दूसरी जनरेशन), आपको ज़्यादा बेहतर इन्फ़्रास्ट्रक्चर देता है. साथ ही, परफ़ॉर्मेंस और स्केलेबिलिटी को बेहतर तरीके से कंट्रोल करने की सुविधा देता है. इसके अलावा, फ़ंक्शन के रनटाइम को ज़्यादा कंट्रोल करने की सुविधा भी देता है. दूसरी जनरेशन के बारे में ज़्यादा जानने के लिए, Cloud Functions for Firebase (दूसरी जनरेशन) लेख पढ़ें. पहली जनरेशन के बारे में ज़्यादा जानने के लिए, Cloud Functions की मदद से Cloud Firestore की सुविधाओं को बढ़ाना लेख पढ़ें.

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 प्रोजेक्ट को कॉन्फ़िगर और सेट अप करने के लिए, 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} is मान्य है, क्योंकि {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

पुष्टि करने के कॉन्टेक्स्ट में उपलब्ध डेटा के बारे में जानकारी के लिए, 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 Functions के लिए Cloud Firestore ट्रिगर से जुड़ी इन सीमाओं का ध्यान रखें:

  • Cloud Functions (पहली जनरेशन) के लिए, Firestore नेटिव मोड में "(default)" डेटाबेस का होना ज़रूरी है. यह Cloud Firestore नाम वाले डेटाबेस या Datastore मोड के साथ काम नहीं करता. ऐसे मामलों में, इवेंट कॉन्फ़िगर करने के लिए कृपया Cloud Functions (दूसरी जनरेशन) का इस्तेमाल करें.
  • ऑर्डर करने की कोई गारंटी नहीं है. तेज़ी से बदलाव होने पर, फ़ंक्शन को अनचाहे क्रम में कॉल किया जा सकता है.
  • इवेंट कम से कम एक बार डिलीवर किए जाते हैं. हालांकि, एक इवेंट से फ़ंक्शन को कई बार कॉल किया जा सकता है. 'सिर्फ़ एक बार' सिद्धांत पर निर्भर रहने से बचें और आईडम्पोटेंट फ़ंक्शन लिखें.
  • Datastore मोड में Cloud Firestore के लिए, Cloud Functions (दूसरी जनरेशन) की ज़रूरत होती है. Cloud Functions (1st gen) में Datastore मोड काम नहीं करता.
  • ट्रिगर, किसी एक डेटाबेस से जुड़ा होता है. ऐसा ट्रिगर नहीं बनाया जा सकता जो एक से ज़्यादा डेटाबेस से मेल खाता हो.
  • किसी डेटाबेस को मिटाने से, उस डेटाबेस के लिए सेट किए गए ट्रिगर अपने-आप नहीं मिटते. ट्रिगर इवेंट डिलीवर करना बंद कर देता है. हालांकि, यह तब तक मौजूद रहता है, जब तक ट्रिगर को मिटाया नहीं जाता.
  • अगर मैच किया गया कोई इवेंट, अनुरोध के ज़्यादा से ज़्यादा साइज़ से ज़्यादा है, तो हो सकता है कि इवेंट को Cloud Functions (पहली जनरेशन) को न भेजा जाए.
    • अनुरोध के साइज़ की वजह से डिलीवर न किए गए इवेंट, प्लैटफ़ॉर्म लॉग में लॉग किए जाते हैं. साथ ही, इन्हें प्रोजेक्ट के लिए लॉग के इस्तेमाल में गिना जाता है.
    • आपको ये लॉग, लॉग एक्सप्लोरर में मिल सकते हैं. इनमें यह मैसेज होता है: "पहली जनरेशन के लिए तय सीमा से ज़्यादा साइज़ होने की वजह से, इवेंट को Cloud फ़ंक्शन तक नहीं पहुंचाया जा सकता..." error गंभीरता. आपको फ़ंक्शन का नाम, functionName फ़ील्ड में दिखेगा. अगर receiveTimestamp फ़ील्ड में मौजूद समय अभी एक घंटे के अंदर है, तो टाइमस्टैंप से पहले और बाद के स्नैपशॉट के साथ दस्तावेज़ को पढ़कर, इवेंट के असली कॉन्टेंट का पता लगाया जा सकता है.
    • इस तरह की कैडेंस से बचने के लिए, ये काम किए जा सकते हैं:
      • Cloud Functions (दूसरी जनरेशन) पर माइग्रेट और अपग्रेड करें
      • दस्तावेज़ का साइज़ कम करना
      • सवाल में मौजूद Cloud Functions को मिटाएं
    • बहिष्करण का इस्तेमाल करके, लॉगिंग की सुविधा बंद की जा सकती है. हालांकि, ध्यान दें कि उल्लंघन करने वाले इवेंट अब भी डिलीवर नहीं किए जाएंगे.