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

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

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

  1. একটি নির্দিষ্ট নথিতে পরিবর্তনের জন্য অপেক্ষা করে।
  2. ট্রিগারসমূহ যখন একটি ইভেন্ট ঘটে এবং সঞ্চালিত তার কর্ম (দেখুন কি আমি মেঘ কার্যাবলী সঙ্গে করতে পারি? ব্যবহারের ক্ষেত্রে উদাহরণ জন্য)।
  3. নির্দিষ্ট ডকুমেন্টে সংরক্ষিত ডেটার একটি স্ন্যাপশট ধারণকারী একটি ডেটা বস্তু গ্রহণ করে। জন্য onWrite বা onUpdate ঘটনা, তথ্য বস্তুর দুই স্ন্যাপশট যে আগে ও triggering ঘটনার পরে ডেটা রাষ্ট্র প্রতিনিধিত্ব রয়েছে।

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

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

Firebase SDK এর জন্য মেঘ কার্যাবলী একটি রপ্তানি functions.firestore বস্তু আপনি নির্দিষ্ট ক্লাউড Firestore ঘটনা বাঁধা হ্যান্ডেলার তৈরি করতে পারবেন।

ইভেন্টের ধরণ ট্রিগার
onCreate প্রথমবারের জন্য একটি নথি লেখা হলে ট্রিগার করা হয়
onUpdate ট্রিগার করা হয় যখন একটি নথি ইতিমধ্যে বিদ্যমান এবং কোন মান পরিবর্তন করা হয়।
onDelete ট্রিগার যখন ডেটা সহ একটি নথি মুছে ফেলা হয়।
onWrite আলোড়ন সৃষ্টি যখন onCreate , onUpdate বা onDelete সূত্রপাত হয়।

আপনি একটি প্রকল্পের এখনো Firebase জন্য মেঘ কাজকর্মের জন্য সক্ষম করা নেই, তাহলে পড়তে লিখতে এবং স্থাপন আপনার প্রথম কার্যাবলী: শুরু করা যাক কনফিগার করার এবং Firebase প্রকল্পের জন্য আপনার ক্লাউড কার্যাবলী সেট আপ করুন।

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

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

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

Node.js

const functions = require('firebase-functions');

exports.myFunction = functions.firestore
  .document('my-collection/{docId}')
  .onWrite((change, context) => { /* ... */ });

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

একটি একক নথি উল্লেখ করুন

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

Node.js

// Listen for any change on document `marie` in collection `users`
exports.myFunctionName = functions.firestore
    .document('users/marie').onWrite((change, context) => {
      // ... Your code here
    });

ওয়াইল্ডকার্ড ব্যবহার করে দলিলের একটি গ্রুপ নির্দিষ্ট করুন

আপনি এই ধরনের একটি নির্দিষ্ট সংগ্রহে কোনো ডকুমেন্ট হিসেবে দস্তাবেজ, একটি গ্রুপ করার জন্য একটি ট্রিগার সংযুক্ত করতে চান, তাহলে একটি ব্যবহার {wildcard} দস্তাবেজ আইডি স্থানে:

Node.js

// Listen for changes in all documents in the 'users' collection
exports.useWildcard = functions.firestore
    .document('users/{userId}')
    .onWrite((change, context) => {
      // If we set `/users/marie` to {name: "Marie"} then
      // context.params.userId == "marie"
      // ... and ...
      // change.after.data() == {name: "Marie"}
    });

এই উদাহরণে, যখন কোনো দস্তাবেজে কোনো ক্ষেত্র users পরিবর্তিত হয়, এটি একটি ওয়াইল্ডকার্ড নামক মিলে যায় userId

একটি দস্তাবেজ যদি users অনুসংগ্রহ রয়েছে এবং এই অনুসংগ্রহ 'কাগজপত্র এক একটি ক্ষেত্র পরিবর্তন করা হয়, userId ওয়াইল্ডকার্ড আলোড়ন সৃষ্টি করা হয় না।

ওয়াইল্ডকার্ড ম্যাচ ডকুমেন্ট পথ থেকে নিষ্কাশিত এবং মধ্যে সংরক্ষণ করা হয় context.params । আপনি স্পষ্ট সংগ্রহ বা ডকুমেন্ট আইডি প্রতিস্থাপন করতে যতটা ওয়াইল্ডকার্ড নির্ধারণ করতে পারেন, উদাহরণস্বরূপ:

Node.js

// Listen for changes in all documents in the 'users' collection and all subcollections
exports.useMultipleWildcards = functions.firestore
    .document('users/{userId}/{messageCollectionId}/{messageId}')
    .onWrite((change, context) => {
      // If we set `/users/marie/incoming_messages/134` to {body: "Hello"} then
      // context.params.userId == "marie";
      // context.params.messageCollectionId == "incoming_messages";
      // context.params.messageId == "134";
      // ... and ...
      // change.after.data() == {body: "Hello"}
    });

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

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

আপনি একটি ব্যবহার করে যে কোনো সময় একটি নতুন দস্তাবেজ একটি সংগ্রহ তৈরি হয় আগুনে একটি ফাংশন আরম্ভ করতে পারবেন onCreate() একটি সঙ্গে হ্যান্ডলার ওয়াইল্ডকার্ড । এই উদাহরণটিতে ফাংশন কল createUser প্রত্যেক সময় একটি নতুন ব্যবহারকারী প্রোফাইল যোগ করা হয়:

Node.js

exports.createUser = functions.firestore
    .document('users/{userId}')
    .onCreate((snap, context) => {
      // Get an object representing the document
      // e.g. {'name': 'Marie', 'age': 66}
      const newValue = snap.data();

      // access a particular field as you would any JS property
      const name = newValue.name;

      // perform desired operations ...
    });

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

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

Node.js

exports.updateUser = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Get an object representing the document
      // e.g. {'name': 'Marie', 'age': 66}
      const newValue = change.after.data();

      // ...or the previous value before this update
      const previousValue = change.before.data();

      // access a particular field as you would any JS property
      const name = newValue.name;

      // perform desired operations ...
    });

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

এছাড়াও আপনি একটি ফাংশন আরম্ভ করতে পারবেন যখন একটি নথি ব্যবহার মুছে ফেলা হয় onDelete() একটি সঙ্গে ফাংশন ওয়াইল্ডকার্ড । এই উদাহরণটিতে ফাংশন কল deleteUser যখন একজন ব্যবহারকারী তাদের ব্যবহারকারী প্রোফাইল মুছে ফেলে:

Node.js

exports.deleteUser = functions.firestore
    .document('users/{userID}')
    .onDelete((snap, context) => {
      // Get an object representing the document prior to deletion
      // e.g. {'name': 'Marie', 'age': 66}
      const deletedValue = snap.data();

      // perform desired operations ...
    });

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

আপনি কি ইভেন্টের হচ্ছে বহিস্কার ধরণ যত্ন সম্পর্কে না থাকে, তাহলে আপনি ব্যবহার করে একটি ক্লাউড Firestore দস্তাবেজে থাকা সমস্ত পরিবর্তনের জন্য শুনতে পারেন onWrite() একটি সঙ্গে ফাংশন ওয়াইল্ডকার্ড । এই উদাহরণটিতে ফাংশন কল modifyUser একটি ব্যবহারকারী সৃষ্টি হলে আপডেট, বা মুছে ফেলা যদি:

Node.js

exports.modifyUser = functions.firestore
    .document('users/{userID}')
    .onWrite((change, context) => {
      // Get an object with the current document value.
      // If the document does not exist, it has been deleted.
      const document = change.after.exists ? change.after.data() : null;

      // Get an object with the previous document value (for update or delete)
      const oldDocument = change.before.data();

      // perform desired operations ...
    });

ডেটা পড়া এবং লেখা

যখন একটি ফাংশন ট্রিগার হয়, এটি ইভেন্ট সম্পর্কিত ডেটার একটি স্ন্যাপশট প্রদান করে। আপনি এই স্ন্যাপশটটি ব্যবহার করতে পারেন ইভেন্টটি ট্রিগার করা ডকুমেন্ট থেকে পড়তে বা লিখতে, অথবা আপনার ডাটাবেসের অন্যান্য অংশ অ্যাক্সেস করতে Firebase অ্যাডমিন SDK ব্যবহার করুন।

ইভেন্ট ডেটা

ডেটা পড়া

যখন একটি ফাংশন ট্রিগার হয়, আপনি আপডেট হওয়া একটি নথি থেকে ডেটা পেতে চাইতে পারেন, অথবা আপডেটের আগে ডেটা পেতে পারেন। আপনি ব্যবহার করে পূর্বে তথ্য পেতে পারেন change.before.data() , যা আপডেট সামনে ডকুমেন্ট স্ন্যাপশট ধারণ করে। একইভাবে, change.after.data() আপডেটের পরে ডকুমেন্ট স্ন্যাপশট রাষ্ট্র রয়েছে।

Node.js

exports.updateUser2 = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Get an object representing the current document
      const newValue = change.after.data();

      // ...or the previous value before this update
      const previousValue = change.before.data();
    });

আপনি অন্য কোন বস্তুর মতো বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারেন। অন্যথা, আপনি ব্যবহার করতে পারেন get এক্সেস নির্দিষ্ট ক্ষেত্র থেকে ফাংশন:

Node.js

// Fetch data using standard accessors
const age = snap.data().age;
const name = snap.data()['name'];

// Fetch data using built in accessor
const experience = snap.get('experience');

ডাটা লেখা

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

এই DocumentReference থেকে আসে মেঘ Firestore Node.js SDK এর মত পদ্ধতি অন্তর্ভুক্ত update() , set() , এবং remove() যাতে আপনি সহজেই নথি যা ফাংশন আলোড়ন সৃষ্টি সংশোধন করতে পারেন।

Node.js

// Listen for updates to any `user` document.
exports.countNameChanges = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Retrieve the current and previous value
      const data = change.after.data();
      const previousData = change.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 change.after.ref.set({
        name_change_count: count + 1
      }, {merge: true});
    });

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

ক্লাউড ফাংশনগুলি একটি বিশ্বস্ত পরিবেশে সম্পাদিত হয়, যার অর্থ সেগুলি আপনার প্রকল্পে একটি পরিষেবা অ্যাকাউন্ট হিসাবে অনুমোদিত। আপনি পড়ে এবং ব্যবহার লিখেছেন সম্পাদন করতে পারবেন Firebase এডমিন SDK এর :

Node.js

const admin = require('firebase-admin');
admin.initializeApp();

const db = admin.firestore();

exports.writeToFirestore = functions.firestore
  .document('some/doc')
  .onWrite((change, context) => {
    db.doc('some/otherdoc').set({ ... });
  });

সীমাবদ্ধতা

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

  • অর্ডার দেওয়ার নিশ্চয়তা নেই। দ্রুত পরিবর্তন একটি অপ্রত্যাশিত ক্রমে ফাংশন আহ্বান ট্রিগার করতে পারে।
  • ইভেন্টগুলি অন্তত একবার বিতরণ করা হয়, তবে একটি একক ইভেন্টের ফলে একাধিক ফাংশন আহ্বান হতে পারে। ঠিক-একবার বলবিজ্ঞান, এবং লেখার উপর নির্ভর করে চলুন idempotent ফাংশন
  • ক্লাউড কার্যাবলী জন্য মেঘ Firestore ট্রিগার শুধুমাত্র জন্য উপলব্ধ দেশীয় মোডে ক্লাউড Firestore । এটি ডেটাস্টোর মোডে ক্লাউড ফায়ারস্টোরের জন্য উপলব্ধ নয়।