Cloud Firestore باعث می شود

با استفاده از عملکردهای ابری ، می توانید بدون نیاز به به روزرسانی کد مشتری ، رویدادها را در Cloud Firestore مدیریت کنید. شما می توانید تغییرات ابر Firestore از طریق ایجاد DocumentSnapshot رابط یا از طریق SDK محیط مدیریت .

در یک چرخه زندگی معمولی ، یک تابع Cloud Firestore موارد زیر را انجام می دهد:

  1. منتظر تغییرات در یک سند خاص است.
  2. فیلیپ فلاپ ها زمانی که یک رویداد رخ می دهد و در انجام وظایف خود (نگاه کنید به چه می توانم با توابع ابر انجام دهد؟ برای نمونه هایی از موارد استفاده).
  3. یک شیء داده را دریافت می کند که حاوی یک تصویر فوری از داده های ذخیره شده در سند مشخص شده است. برای onWrite یا onUpdate حوادث، شی داده ها شامل دو عکس های فوری که نشان دهنده وضعیت داده ها قبل و بعد از این رویداد رها سازی.

فاصله بین محل نمونه Firestore و محل عملکرد می تواند تاخیر قابل توجهی در شبکه ایجاد کند. برای بهینه سازی عملکرد، در نظر مشخص کردن محل تابع که در آن قابل اجرا است.

محرک های عملکرد Cloud Firestore

توابع Cloud برای فایربیس SDK صادرات functions.firestore شی که اجازه می دهد تا به شما برای ایجاد گرداننده گره خورده است به وقایع خاص ابر Firestore.

نوع رویداد ماشه
onCreate وقتی سند برای اولین بار در آن نوشته می شود فعال می شود.
onUpdate زمانی فعال می شود که سندی وجود داشته باشد و مقدار آن تغییر کرده باشد.
onDelete هنگامی که سندی با داده حذف می شود فعال می شود.
onWrite باعث زمانی onCreate ، onUpdate یا onDelete باعث شده است.

اگر شما لازم نیست که یک پروژه برای توابع Cloud برای فایربیس فعال نشده است، پس از آن خواندن شروع: نوشتن و استقرار توابع اول شما را به پیکربندی و تنظیم عملکردهای ابر خود را برای پروژه فایربیس.

نوشتن توابع فعال شده توسط Cloud Firestore

ماشه تابع را تعریف کنید

برای تعریف ماشه 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} به جای ID سند:

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 wildcard است شروع نمی شود.

بازی کلمات از مسیر سند استخراج و ذخیره شده را به 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 ...
    });

خواندن و نوشتن داده ها

هنگامی که یک تابع فعال می شود ، یک تصویر فوری از داده های مربوط به رویداد ارائه می دهد. می توانید از این تصویر فوری برای خواندن یا نوشتن سندی که باعث ایجاد رویداد شده است استفاده کنید ، یا از SDK سرپرست Firebase برای دسترسی به سایر قسمت های پایگاه داده خود استفاده کنید.

داده های رویداد

خواندن داده ها

هنگامی که عملکردی فعال می شود ، ممکن است بخواهید از سندی که به روز شده است اطلاعات دریافت کنید یا قبل از به روزرسانی اطلاعات را دریافت کنید. شما می توانید داده ها قبل با استفاده از گرفتن 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');

نوشتن داده ها

هر فراخوانی تابع با یک سند خاص در پایگاه داده Cloud Firestore شما مرتبط است. شما می توانید که سند به عنوان یک دسترسی 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});
    });

داده های خارج از رویداد ماشه

عملکردهای ابری در یک محیط قابل اعتماد اجرا می شوند ، به این معنی که آنها به عنوان یک حساب سرویس در پروژه شما مجاز هستند. شما می توانید انجام خواند و می نویسد با استفاده از 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({ ... });
  });

محدودیت ها

به محدودیت های زیر برای محرک های Cloud Firestore برای عملکردهای Cloud توجه کنید:

  • سفارش تضمینی نیست. تغییرات سریع می تواند فراخوانی عملکردها را به ترتیب غیر منتظره آغاز کند.
  • رویدادها حداقل یک بار تحویل داده می شوند ، اما یک رویداد ممکن است منجر به فراخوانی چندین عملکرد شود. اجتناب از بسته به دقیقا یک بار مکانیک، و نوشتن توابع idempotent .
  • محرک ابر Firestore برای توابع ابر فقط برای در دسترس است ابر Firestore در حالت بومی . در حالت Datastore برای Cloud Firestore در دسترس نیست.