مدل داده Cloud Firestore

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

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

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

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

اسناد

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

سندی که کاربر alovelace را نشان می‌دهد ممکن است این‌گونه باشد:

  • alovelace

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

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

  • alovelace

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

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

مجموعه‌ها

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

  • ‫ کاربر

    • alovelace

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

    • ‫ aturing

      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');
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
توجه: این محصول در 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")
C++‎
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
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
}
PHP

PHP

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

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

سی شارپ

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

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Ruby
document_ref = firestore.col("users").doc("alovelace")

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

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

Web

import { collection } from "firebase/firestore";

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

Web

var usersCollectionRef = db.collection('users');
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
let usersCollectionRef = db.collection("users")
Objective-C
توجه: این محصول در 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")
C++‎
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
رفتن

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

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

	_ = usersRef
}
PHP

PHP

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

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

سی شارپ

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

CollectionReference collectionRef = db.Collection("users");
Ruby
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');
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
توجه: این محصول در 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")
C++‎
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
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
}
PHP

PHP

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

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

سی شارپ

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

DocumentReference documentRef = db.Document("users/alovelace");
Ruby
document_path_ref = firestore.doc "users/alovelace"

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

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

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

  • ‫ اتاق

    • roomA

      name : "my chat room"

    • roomB

      ...

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

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

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

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

  • ‫ اتاق

    • roomA

      name : "my chat room"

      • ‫ پیام

        • message1

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

        • پیام۲

          ...

    • roomB

      ...

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

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');
Swift
توجه: این محصول در watchOS و App Clip دردسترس نیست.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
توجه: این محصول در 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")
C++‎
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
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
}
PHP

PHP

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

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unity
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");
Ruby
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

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

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

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