Catch up on everthing we announced at this year's Firebase Summit. Learn more

क्लाउड फायरस्टोर ट्रिगर

क्लाउड फ़ंक्शंस के साथ, आप क्लाइंट कोड को अपडेट करने की आवश्यकता के बिना क्लाउड फायरस्टोर में ईवेंट को हैंडल कर सकते हैं। आप के माध्यम से बादल Firestore परिवर्तन कर सकते हैं DocumentSnapshot इंटरफ़ेस या के माध्यम से नियंत्रक SDK

एक सामान्य जीवनचक्र में, क्लाउड फायरस्टोर फ़ंक्शन निम्न कार्य करता है:

  1. किसी विशेष दस्तावेज़ में परिवर्तन की प्रतीक्षा करता है।
  2. ट्रिगर जब कोई घटना होती है और प्रदर्शन अपने कार्यों (देखें क्या मैं बादल कार्य के साथ कर सकते हैं? उपयोग के मामलों का उदाहरण के लिए)।
  3. एक डेटा ऑब्जेक्ट प्राप्त करता है जिसमें निर्दिष्ट दस्तावेज़ में संग्रहीत डेटा का स्नैपशॉट होता है। के लिए onWrite या onUpdate घटनाओं, डेटा वस्तु दो स्नैपशॉट कि पहले और ट्रिगर घटना के बाद डेटा राज्य का प्रतिनिधित्व करते हैं।

फायरस्टोर इंस्टेंस के स्थान और फ़ंक्शन के स्थान के बीच की दूरी महत्वपूर्ण नेटवर्क विलंबता पैदा कर सकती है। अनुकूलन प्रदर्शन करने के लिए, निर्दिष्ट करने पर विचार समारोह स्थान लागू जहां।

क्लाउड फायरस्टोर फ़ंक्शन ट्रिगर

Firebase SDK के लिए बादल कार्य एक निर्यात functions.firestore उद्देश्य यह है कि आप विशिष्ट बादल Firestore घटनाओं से बंधा संचालकों बनाने के लिए अनुमति देता है।

घटना प्रकार उत्प्रेरक
onCreate तब ट्रिगर होता है जब कोई दस्तावेज़ पहली बार लिखा जाता है।
onUpdate तब ट्रिगर होता है जब कोई दस्तावेज़ पहले से मौजूद होता है और उसका कोई मान बदल जाता है।
onDelete डेटा वाले दस्तावेज़ के हटाए जाने पर ट्रिगर होता है।
onWrite उत्प्रेरित जब onCreate , onUpdate या onDelete शुरू हो रहा है।

आप एक परियोजना अभी तक Firebase के लिए बादल कार्य के लिए सक्षम नहीं है, तो पढ़ लिखें और तैनात आपका पहला कार्य: शुरू करने के लिए कॉन्फ़िगर करने के लिए और Firebase परियोजना के लिए अपने बादल कार्य की स्थापना की।

क्लाउड फायरस्टोर-ट्रिगर फ़ंक्शन लिखना

फ़ंक्शन ट्रिगर को परिभाषित करें

Cloud Firestore ट्रिगर को परिभाषित करने के लिए, एक दस्तावेज़ पथ और एक ईवेंट प्रकार निर्दिष्ट करें:

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 subcollections है, और उन subcollections 'दस्तावेजों में से एक में एक क्षेत्र बदल गया है, 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 एसडीके और जैसे तरीके शामिल हैं 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 । यह डेटास्टोर मोड में क्लाउड फायरस्टोर के लिए उपलब्ध नहीं है।