مدل 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 هستند. در واقع، آنها اساسا هستند. تفاوت‌هایی وجود دارد (برای مثال، اسناد از انواع داده‌های اضافی پشتیبانی می‌کنند و اندازه آنها به 1 مگابایت محدود است)، اما به طور کلی، می‌توانید اسناد را به‌عنوان رکوردهای سبک 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")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Kotlin+KTX

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');
وحدت
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")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Kotlin+KTX

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');
وحدت
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")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Kotlin+KTX

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');
وحدت
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 برای ذخیره اتاق های گفتگوی مختلف ایجاد کنید:

  • اتاق

    • اتاق A

      name : "my chat room"

    • B

      ...

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

زیر مجموعه ها

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

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

  • اتاق

    • اتاق A

      name : "my chat room"

      • پیام های

        • پیام

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

        • پیام

          ...

    • B

      ...

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

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")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Kotlin+KTX

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');
وحدت
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 زیر مجموعه ایجاد کنید و مانند هر مرجع مجموعه دیگری با آن تعامل کنید.

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