ক্লাউড ফায়ারস্টোর ট্রিগার করে

Cloud Functions সাহায্যে, আপনি ক্লায়েন্ট কোড আপডেট করার প্রয়োজন ছাড়াই ক্লাউড ফায়ারস্টোরে ইভেন্টগুলি পরিচালনা করতে পারবেন। আপনি ডকুমেন্ট স্ন্যাপশট ইন্টারফেসের মাধ্যমে অথবা অ্যাডমিন SDK এর মাধ্যমে ক্লাউড ফায়ারস্টোর পরিবর্তন করতে পারেন।

একটি সাধারণ জীবনচক্রের মধ্যে, একটি ক্লাউড ফায়ারস্টোর ফাংশন নিম্নলিখিত কাজগুলি করে:

  1. একটি নির্দিষ্ট নথিতে পরিবর্তনের জন্য অপেক্ষা করে।
  2. যখন কোনও ঘটনা ঘটে তখন ট্রিগার করে এবং তার কাজ সম্পাদন করে।
  3. নির্দিষ্ট ডকুমেন্টে সংরক্ষিত ডেটার একটি স্ন্যাপশট ধারণকারী একটি ডেটা অবজেক্ট গ্রহণ করে। লেখা বা আপডেট ইভেন্টের জন্য, ডেটা অবজেক্টে দুটি স্ন্যাপশট থাকে যা ট্রিগারিং ইভেন্টের আগে এবং পরে ডেটা অবস্থা উপস্থাপন করে।

ফায়ারস্টোর ইনস্ট্যান্সের অবস্থান এবং ফাংশনের অবস্থানের মধ্যে দূরত্ব উল্লেখযোগ্য নেটওয়ার্ক ল্যাটেন্সি তৈরি করতে পারে। কর্মক্ষমতা অপ্টিমাইজ করার জন্য, প্রযোজ্য ক্ষেত্রে ফাংশনের অবস্থান নির্দিষ্ট করার কথা বিবেচনা করুন।

ক্লাউড ফায়ারস্টোর ফাংশন ট্রিগার করে

Cloud Functions for Firebase নিম্নলিখিত ক্লাউড ফায়ারস্টোর ইভেন্ট ট্রিগারগুলি রপ্তানি করে যাতে আপনি নির্দিষ্ট ক্লাউড ফায়ারস্টোর ইভেন্টের সাথে সংযুক্ত হ্যান্ডলার তৈরি করতে পারেন:

নোড.জেএস

ইভেন্টের ধরণ ট্রিগার
onDocumentCreated যখন প্রথমবারের মতো কোনও নথি লেখা হয় তখন এটি সক্রিয় হয়।
onDocumentUpdated যখন কোনও ডকুমেন্ট ইতিমধ্যেই বিদ্যমান থাকে এবং কোনও মান পরিবর্তিত হয় তখন ট্রিগার হয়।
onDocumentDeleted একটি নথি মুছে ফেলা হলে ট্রিগার হয়।
onDocumentWritten onDocumentCreated , onDocumentUpdated অথবা onDocumentDeleted ট্রিগার করা হলে ট্রিগার হয়।
onDocumentCreatedWithAuthContext অতিরিক্ত প্রমাণীকরণ তথ্য সহ onDocumentCreated
onDocumentWrittenWithAuthContext অতিরিক্ত প্রমাণীকরণ তথ্য সহ onDocumentWritten
onDocumentDeletedWithAuthContext অতিরিক্ত প্রমাণীকরণ তথ্য সহ onDocumentDeleted
onDocumentUpdatedWithAuthContext onDocumentUpdated অতিরিক্ত প্রমাণীকরণ তথ্য সহ আপডেট করা হয়েছে

পাইথন

ইভেন্টের ধরণ ট্রিগার
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 Functions for Firebase জন্য কোনও প্রকল্প সক্রিয় না থাকে, তাহলে আপনার Cloud Functions for Firebase প্রকল্পটি কনফিগার এবং সেট আপ করতে Get started with Cloud Functions for Firebase (2nd gen) পড়ুন।

ক্লাউড ফায়ারস্টোর-ট্রিগার করা ফাংশন লেখা

একটি ফাংশন ট্রিগার সংজ্ঞায়িত করুন

ক্লাউড ফায়ারস্টোর ট্রিগার সংজ্ঞায়িত করতে, একটি ডকুমেন্ট পাথ এবং একটি ইভেন্টের ধরণ নির্দিষ্ট করুন:

নোড.জেএস

const {
  onDocumentWritten,
  onDocumentCreated,
  onDocumentUpdated,
  onDocumentDeleted,
  Change,
  FirestoreEvent
} = require('firebase-functions/v2/firestore');

exports.myfunction = onDocumentWritten("my-collection/{docId}", (event) => {
   /* ... */ 
});

পাইথন

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:

ডকুমেন্ট পাথগুলি একটি নির্দিষ্ট ডকুমেন্ট অথবা একটি ওয়াইল্ডকার্ড প্যাটার্ন উল্লেখ করতে পারে।

একটি একক নথি নির্দিষ্ট করুন

যদি আপনি একটি নির্দিষ্ট ডকুমেন্টে যেকোনো পরিবর্তনের জন্য একটি ইভেন্ট ট্রিগার করতে চান তাহলে আপনি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন।

নোড.জেএস

const {
  onDocumentWritten,
  Change,
  FirestoreEvent
} = require('firebase-functions/v2/firestore');

exports.myfunction = onDocumentWritten("users/marie", (event) => {
  // Your code here
});

পাইথন

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} ব্যবহার করুন:

নোড.জেএস

const {
  onDocumentWritten,
  Change,
  FirestoreEvent
} = require('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"}
});

পাইথন

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 এ সংরক্ষণ করা হয়। আপনি যত খুশি ওয়াইল্ডকার্ড সংজ্ঞায়িত করতে পারেন, যেমন স্পষ্ট সংগ্রহ বা ডকুমেন্ট আইডি প্রতিস্থাপন করতে, উদাহরণস্বরূপ:

নোড.জেএস

const {
  onDocumentWritten,
  Change,
  FirestoreEvent
} = require('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"}
});

পাইথন

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} সর্বদা একটি ডকুমেন্টের দিকে নির্দেশ করবে।

ইভেন্ট ট্রিগার

একটি নতুন ডকুমেন্ট তৈরি হলে একটি ফাংশন ট্রিগার করুন

কোনও সংগ্রহে নতুন ডকুমেন্ট তৈরি হওয়ার সাথে সাথেই আপনি কোনও ফাংশন চালু করতে পারেন। প্রতিবার নতুন ব্যবহারকারী প্রোফাইল যুক্ত হওয়ার সাথে সাথে এই উদাহরণ ফাংশনটি ট্রিগার করে:

নোড.জেএস

const {
  onDocumentCreated,
  Change,
  FirestoreEvent
} = require('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 ব্যবহার করুন।

পাইথন

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 ...

একটি ডকুমেন্ট আপডেট হলে একটি ফাংশন ট্রিগার করুন

একটি ডকুমেন্ট আপডেট করার সময় আপনি একটি ফাংশন চালু করতে পারেন। এই উদাহরণে ফাংশনটি চালু হয় যদি কোনও ব্যবহারকারী তাদের প্রোফাইল পরিবর্তন করে:

নোড.জেএস

const {
  onDocumentUpdated,
  Change,
  FirestoreEvent
} = require('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 ব্যবহার করুন।

পাইথন

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 ...

একটি ডকুমেন্ট মুছে ফেলা হলে একটি ফাংশন ট্রিগার করুন

কোনও ডকুমেন্ট মুছে ফেলা হলে আপনি একটি ফাংশন ট্রিগার করতে পারেন। এই উদাহরণ ফাংশনটি তখন কার্যকর হয় যখন কোনও ব্যবহারকারী তার ব্যবহারকারীর প্রোফাইল মুছে ফেলে:

নোড.জেএস

const {
  onDocumentDeleted,
  Change,
  FirestoreEvent
} = require('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 ব্যবহার করুন।

পাইথন

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 ...

একটি ডকুমেন্টের সকল পরিবর্তনের জন্য একটি ফাংশন ট্রিগার করুন

যদি আপনি কোন ধরণের ইভেন্ট চালু হচ্ছে তা নিয়ে চিন্তিত না হন, তাহলে "ডকুমেন্ট লিখিত" ইভেন্ট ট্রিগার ব্যবহার করে ক্লাউড ফায়ারস্টোর ডকুমেন্টের সমস্ত পরিবর্তন শুনতে পারেন। এই উদাহরণ ফাংশনটি যদি কোনও ব্যবহারকারী তৈরি, আপডেট বা মুছে ফেলা হয় তবে কার্যকর হয়:

নোড.জেএস

const {
  onDocumentWritten,
  Change,
  FirestoreEvent
} = require('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 ব্যবহার করুন।

পাইথন

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 আপডেটের পরে ডকুমেন্টের স্ন্যাপশট অবস্থা ধারণ করে।

নোড.জেএস

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

পাইথন

@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 ফাংশন ব্যবহার করতে পারেন:

নোড.জেএস

// 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');

পাইথন

# 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"]

তথ্য লেখা

প্রতিটি ফাংশন ইনভোকেশন আপনার ক্লাউড ফায়ারস্টোর ডাটাবেসের একটি নির্দিষ্ট ডকুমেন্টের সাথে যুক্ত। আপনি আপনার ফাংশনে ফিরে আসা স্ন্যাপশটে সেই ডকুমেন্টটি অ্যাক্সেস করতে পারবেন।

ডকুমেন্ট রেফারেন্সে update() , set() এবং remove() এর মতো পদ্ধতি অন্তর্ভুক্ত রয়েছে যাতে আপনি ফাংশনটি ট্রিগারকারী ডকুমেন্টটি পরিবর্তন করতে পারেন।

নোড.জেএস

const {onDocumentUpdated} = require('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 event.data.after.ref.set({
    name_change_count: count + 1
  }, {merge: true});

});

পাইথন

@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})

ব্যবহারকারীর প্রমাণীকরণ তথ্য অ্যাক্সেস করুন

যদি আপনি নিম্নলিখিত ইভেন্টের ধরণগুলির মধ্যে একটি ব্যবহার করেন, তাহলে আপনি ইভেন্টটি ট্রিগারকারী প্রধান সম্পর্কে ব্যবহারকারী প্রমাণীকরণ তথ্য অ্যাক্সেস করতে পারবেন। এই তথ্যটি বেস ইভেন্টে ফেরত দেওয়া তথ্যের অতিরিক্ত।

নোড.জেএস

  • onDocumentCreatedWithAuthContext
  • onDocumentWrittenWithAuthContext
  • onDocumentDeletedWithAuthContext
  • onDocumentUpdatedWithAuthContext

পাইথন

  • 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 দেখুন। নিম্নলিখিত উদাহরণটি প্রমাণীকরণ তথ্য কীভাবে পুনরুদ্ধার করতে হয় তা দেখায়:

নোড.জেএস

const {onDocumentWrittenWithAuthContext} = require('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}); 
}); 

পাইথন

@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 ব্যবহার করে পঠন এবং লেখার কাজ সম্পাদন করতে পারেন:

নোড.জেএস

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

পাইথন

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 Firestore নামক ডাটাবেস বা ডেটাস্টোর মোড সমর্থন করে না। এই ধরনের ক্ষেত্রে ইভেন্ট কনফিগার করতে দয়া করে Cloud Functions (দ্বিতীয় প্রজন্ম) ব্যবহার করুন।
  • Cloud Functions এবং Cloud Firestore ট্রিগার সহ ক্রস প্রোজেক্ট সেটআপ একটি সীমাবদ্ধতা। Cloud Firestore ট্রিগার সেটআপ করার জন্য Cloud Functions একই প্রোজেক্টে থাকতে হবে।
  • অর্ডার দেওয়ার নিশ্চয়তা নেই। দ্রুত পরিবর্তনগুলি অপ্রত্যাশিত ক্রমে ফাংশন ইনভোকেশন ট্রিগার করতে পারে।
  • ইভেন্টগুলি কমপক্ষে একবার ডেলিভারি করা হয়, কিন্তু একটি ইভেন্টের ফলে একাধিক ফাংশন ইনভোকেশন হতে পারে। ঠিক একবারের মেকানিক্সের উপর নির্ভর করা এড়িয়ে চলুন এবং idempotent functions লিখুন।
  • ডেটাস্টোর মোডে Cloud Firestore Cloud Functions (দ্বিতীয় জেনারেশন) প্রয়োজন। Cloud Functions (প্রথম জেনারেশন) ডেটাস্টোর মোড সমর্থন করে না।
  • একটি ট্রিগার একটি একক ডাটাবেসের সাথে যুক্ত। আপনি এমন একটি ট্রিগার তৈরি করতে পারবেন না যা একাধিক ডাটাবেসের সাথে মেলে।
  • একটি ডাটাবেস মুছে ফেলার ফলে সেই ডাটাবেসের কোনও ট্রিগার স্বয়ংক্রিয়ভাবে মুছে যায় না। ট্রিগারটি ইভেন্ট সরবরাহ করা বন্ধ করে দেয় কিন্তু আপনি ট্রিগারটি মুছে না ফেলা পর্যন্ত বিদ্যমান থাকে।
  • যদি কোনও মিলে যাওয়া ইভেন্ট সর্বাধিক অনুরোধের আকার অতিক্রম করে, তাহলে ইভেন্টটি Cloud Functions (প্রথম প্রজন্ম) ডেলিভার করা নাও হতে পারে।
    • অনুরোধের আকারের কারণে যেসব ইভেন্ট ডেলিভারি করা হয়নি সেগুলি প্ল্যাটফর্ম লগে লগ করা হয় এবং প্রকল্পের লগ ব্যবহারের জন্য গণনা করা হয়।
    • লগস এক্সপ্লোরারে আপনি এই লগগুলি খুঁজে পেতে পারেন যেখানে "Event cannot delivered to Cloud function due to size exceding the limit for 1st gen..." লেখা থাকবে error আপনি functionName ক্ষেত্রের নিচে ফাংশনের নাম খুঁজে পেতে পারেন। যদি receiveTimestamp ক্ষেত্রটি এখনও এক ঘন্টার মধ্যে থাকে, তাহলে টাইমস্ট্যাম্পের আগে এবং পরে একটি স্ন্যাপশট সহ প্রশ্নবিদ্ধ ডকুমেন্টটি পড়ে আপনি প্রকৃত ইভেন্টের বিষয়বস্তু অনুমান করতে পারেন।
    • এই ধরণের ক্যাডেন্স এড়াতে, আপনি যা করতে পারেন:
      • Cloud Functions মাইগ্রেট এবং আপগ্রেড করুন (দ্বিতীয় প্রজন্ম)
      • ডকুমেন্টের আকার ছোট করুন
      • প্রশ্নবিদ্ধ Cloud Functions মুছুন
    • আপনি এক্সক্লুশন ব্যবহার করে লগিং নিজেই বন্ধ করতে পারেন কিন্তু মনে রাখবেন যে আপত্তিকর ঘটনাগুলি এখনও সরবরাহ করা হবে না।