مدل Cloud Firestore Data

Cloud Firestore یک پایگاه داده NoSQL و سندگرا است. برخلاف پایگاه داده SQL، در اینجا هیچ جدول یا ردیفی وجود ندارد. در عوض، شما داده‌ها را در اسناد ذخیره می‌کنید که در مجموعه‌هایی سازماندهی شده‌اند.

هر سند شامل مجموعه‌ای از جفت‌های کلید-مقدار است. Cloud Firestore برای ذخیره مجموعه‌های بزرگی از اسناد کوچک بهینه شده است.

تمام اسناد باید در مجموعه‌ها ذخیره شوند. اسناد می‌توانند شامل زیرمجموعه‌ها و اشیاء تو در تو باشند که هر دو می‌توانند شامل فیلدهای اولیه مانند رشته‌ها یا اشیاء پیچیده مانند لیست‌ها باشند.

مجموعه‌ها و اسناد به طور ضمنی در Cloud Firestore ایجاد می‌شوند. به سادگی داده‌ها را به یک سند درون یک مجموعه اختصاص دهید. اگر مجموعه یا سند وجود نداشته باشد، Cloud Firestore آن را ایجاد می‌کند.

اسناد

در Cloud Firestore ، واحد ذخیره‌سازی سند است. یک سند، یک رکورد سبک وزن است که شامل فیلدهایی است که به مقادیر نگاشت می‌شوند. هر سند با یک نام مشخص می‌شود.

سندی که نماینده کاربر alovelace است، ممکن است چیزی شبیه به این باشد:

  • آلوولاس

    first : "Ada"
    last : "Lovelace"
    born : 1815

اشیاء پیچیده و تو در تو در یک سند، نقشه نامیده می‌شوند. برای مثال، می‌توانید نام کاربر را از مثال بالا با یک نقشه، مانند این، ساختار دهید:

  • آلوولاس

    name :
    first : "Ada"
    last : "Lovelace"
    born : 1815

ممکن است متوجه شده باشید که اسناد بسیار شبیه JSON هستند. در واقع، اساساً همینطور هستند. تفاوت‌هایی وجود دارد (برای مثال، اسناد از انواع داده‌های اضافی پشتیبانی می‌کنند و اندازه آنها به ۱ مگابایت محدود است)، اما به طور کلی، می‌توانید با اسناد به عنوان رکوردهای سبک JSON رفتار کنید.

مجموعه‌ها

اسناد در مجموعه‌ها قرار دارند که صرفاً ظروفی برای اسناد هستند. برای مثال، می‌توانید یک مجموعه users داشته باشید که شامل کاربران مختلف شما باشد و هر کدام توسط یک سند نمایش داده شوند:

  • کاربران

    • آلوولاس

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • آموزشی

      first : "Alan"
      last : "Turing"
      born : 1912

Cloud Firestore بدون طرح است، بنابراین شما در مورد اینکه چه فیلدهایی را در هر سند قرار می‌دهید و چه نوع داده‌هایی را در آن فیلدها ذخیره می‌کنید، آزادی کامل دارید. اسناد درون یک مجموعه می‌توانند همگی شامل فیلدهای مختلفی باشند یا انواع مختلفی از داده‌ها را در آن فیلدها ذخیره کنند. با این حال، ایده خوبی است که از فیلدها و انواع داده‌های یکسان در چندین سند استفاده کنید تا بتوانید اسناد را راحت‌تر جستجو کنید.

یک مجموعه شامل اسناد است و نه چیز دیگری. نمی‌تواند مستقیماً شامل فیلدهای خام با مقادیر باشد و نمی‌تواند شامل مجموعه‌های دیگر باشد. (برای توضیح نحوه ساختاردهی داده‌های پیچیده‌تر در Cloud Firestore به بخش داده‌های سلسله مراتبی مراجعه کنید.)

نام اسناد درون یک مجموعه منحصر به فرد است. شما می‌توانید کلیدهای خودتان، مانند شناسه‌های کاربری، را ارائه دهید یا می‌توانید به Cloud Firestore اجازه دهید تا به طور خودکار شناسه‌های تصادفی برای شما ایجاد کند.

نیازی به «ایجاد» یا «حذف» مجموعه‌ها نیست. پس از ایجاد اولین سند در یک مجموعه، آن مجموعه وجود دارد. اگر تمام اسناد یک مجموعه را حذف کنید، دیگر وجود نخواهد داشت.

منابع

هر سند در Cloud Firestore به طور منحصر به فرد توسط موقعیت alovelace آن در پایگاه داده شناسایی می‌شود. مثال قبلی یک سند را در مجموعه users نشان داد. برای ارجاع به این مکان در کد خود، می‌توانید یک ارجاع به آن ایجاد کنید.

Web

import { doc } from "firebase/firestore";

const alovelaceDocumentRef = doc(db, 'users', 'alovelace');

Web

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
سویفت
توجه: این محصول در watchOS و App Clip موجود نیست.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
هدف-سی
توجه: این محصول در watchOS و App Clip موجود نیست.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Kotlin

val alovelaceDocumentRef = db.collection("users").document("alovelace")

Java

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

Dart

final alovelaceDocumentRef = db.collection("users").doc("alovelace");
جاوا
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
پایتون
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
سی++
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
نود جی اس
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
برو

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
پی اچ پی

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

$document = $db->collection('samples/php/users')->document('alovelace');
وحدت
DocumentReference documentRef = db.Collection("users").Document("alovelace");
سی شارپ

سی شارپ

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

DocumentReference documentRef = db.Collection("users").Document("alovelace");
روبی
document_ref = firestore.col("users").doc("alovelace")

یک مرجع، یک شیء سبک است که فقط به مکانی در پایگاه داده شما اشاره می‌کند. شما می‌توانید یک مرجع ایجاد کنید، چه داده‌ای در آنجا وجود داشته باشد چه نباشد، و ایجاد یک مرجع هیچ عملیات شبکه‌ای انجام نمی‌دهد.

همچنین می‌توانید به مجموعه‌ها ارجاع دهید:

Web

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web

var usersCollectionRef = db.collection('users');
سویفت
توجه: این محصول در watchOS و App Clip موجود نیست.
let usersCollectionRef = db.collection("users")
هدف-سی
توجه: این محصول در watchOS و App Clip موجود نیست.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Kotlin

val usersCollectionRef = db.collection("users")

Java

CollectionReference usersCollectionRef = db.collection("users");

Dart

final usersCollectionRef = db.collection("users");
جاوا
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
پایتون
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
سی++
CollectionReference users_collection_reference = db->Collection("users");
نود جی اس
const usersCollectionRef = db.collection('users');
برو

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
پی اچ پی

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

$collection = $db->collection('samples/php/users');
وحدت
CollectionReference collectionRef = db.Collection("users");
سی شارپ

سی شارپ

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

CollectionReference collectionRef = db.Collection("users");
روبی
collection_ref = firestore.col "users"

برای راحتی، می‌توانید با مشخص کردن مسیر یک سند یا مجموعه به صورت یک رشته، که اجزای مسیر با یک اسلش ( / ) از هم جدا شده‌اند، ارجاعات را ایجاد کنید. به عنوان مثال، برای ایجاد ارجاع به سند alovelace :

Web

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
سویفت
توجه: این محصول در watchOS و App Clip موجود نیست.
let aLovelaceDocumentReference = db.document("users/alovelace")
هدف-سی
توجه: این محصول در watchOS و App Clip موجود نیست.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Kotlin

val alovelaceDocumentRef = db.document("users/alovelace")

Java

DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

Dart

final aLovelaceDocRef = db.doc("users/alovelace");
جاوا
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
پایتون
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
سی++
DocumentReference alovelace_document = db->Document("users/alovelace");
نود جی اس
const alovelaceDocumentRef = db.doc('users/alovelace');
برو

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
پی اچ پی

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

$document = $db->document('users/alovelace');
وحدت
DocumentReference documentRef = db.Document("users/alovelace");
سی شارپ

سی شارپ

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

DocumentReference documentRef = db.Document("users/alovelace");
روبی
document_path_ref = firestore.doc "users/alovelace"

داده‌های سلسله مراتبی

برای درک نحوه عملکرد ساختارهای داده سلسله مراتبی در Cloud Firestore ، یک برنامه چت نمونه با پیام‌ها و اتاق‌های گفتگو را در نظر بگیرید.

شما می‌توانید مجموعه‌ای به نام rooms برای ذخیره اتاق‌های گفتگوی مختلف ایجاد کنید:

  • اتاق‌ها

    • الف

      name : "my chat room"

    • ب

      ...

حالا که اتاق‌های گفتگو دارید، تصمیم بگیرید که چگونه پیام‌های خود را ذخیره کنید. ممکن است نخواهید آنها را در سند اتاق گفتگو ذخیره کنید. اسناد در Cloud Firestore باید سبک باشند و یک اتاق گفتگو می‌تواند شامل تعداد زیادی پیام باشد. با این حال، می‌توانید مجموعه‌های اضافی را در سند اتاق گفتگوی خود، به عنوان زیرمجموعه، ایجاد کنید.

زیرمجموعه‌ها

بهترین راه برای ذخیره پیام‌ها در این سناریو، استفاده از زیرمجموعه‌ها است. یک زیرمجموعه، مجموعه‌ای است که با یک سند خاص مرتبط است.

شما می‌توانید برای هر سند اتاق در مجموعه rooms خود، یک زیرمجموعه به نام messages ایجاد کنید:

  • اتاق‌ها

    • الف

      name : "my chat room"

      • پیام‌ها

        • پیام

          from : "alex"
          msg : "Hello World!"

        • پیام ۲

          ...

    • ب

      ...

در این مثال، شما می‌توانید با کد زیر، ارجاعی به یک پیام در زیرمجموعه ایجاد کنید:

Web

import { doc } from "firebase/firestore"; 

const messageRef = doc(db, "rooms", "roomA", "messages", "message1");

Web

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
سویفت
توجه: این محصول در watchOS و App Clip موجود نیست.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
هدف-سی
توجه: این محصول در watchOS و App Clip موجود نیست.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Kotlin

val messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")

Java

DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

Dart

final messageRef = db
    .collection("rooms")
    .doc("roomA")
    .collection("messages")
    .doc("message1");
جاوا
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
پایتون
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
سی++
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
نود جی اس
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
برو

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
پی اچ پی

پی اچ پی

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
وحدت
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
سی شارپ

سی شارپ

برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانه‌های کلاینت Cloud Firestore مراجعه کنید.

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
روبی
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

به الگوی متناوب مجموعه‌ها و اسناد توجه کنید. مجموعه‌ها و اسناد شما باید همیشه از این الگو پیروی کنند. شما نمی‌توانید به یک مجموعه در یک مجموعه یا به یک سند در یک سند دیگر ارجاع دهید.

زیرمجموعه‌ها به شما امکان می‌دهند داده‌ها را به صورت سلسله مراتبی ساختاردهی کنید و دسترسی به داده‌ها را آسان‌تر کنید. برای دریافت همه پیام‌های موجود در roomA ، می‌توانید یک ارجاع به مجموعه messages زیرمجموعه ایجاد کنید و مانند هر ارجاع به مجموعه دیگری با آن تعامل داشته باشید.

اسناد موجود در زیرمجموعه‌ها می‌توانند شامل زیرمجموعه‌های دیگری نیز باشند که به شما امکان می‌دهد داده‌های بیشتری را در آنها جایگذاری کنید. می‌توانید داده‌ها را تا عمق ۱۰۰ سطح در زیرمجموعه‌ها قرار دهید.