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');
سویفت
let alovelaceDocumentRef = db.collection("users").document("alovelace")
هدف-سی
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");
جاوا
پایتون
Python
سی++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
وحدت
DocumentReference documentRef = db.Collection("users").Document("alovelace");
سی شارپ
سی شارپ
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
روبی
یک مرجع، یک شیء سبک است که فقط به مکانی در پایگاه داده شما اشاره میکند. شما میتوانید یک مرجع ایجاد کنید، چه دادهای در آنجا وجود داشته باشد چه نباشد، و ایجاد یک مرجع هیچ عملیات شبکهای انجام نمیدهد.
همچنین میتوانید به مجموعهها ارجاع دهید:
Web
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web
var usersCollectionRef = db.collection('users');
سویفت
let usersCollectionRef = db.collection("users")
هدف-سی
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin
val usersCollectionRef = db.collection("users")
Java
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
جاوا
پایتون
Python
سی++
CollectionReference users_collection_reference = db->Collection("users");
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
وحدت
CollectionReference collectionRef = db.Collection("users");
سی شارپ
سی شارپ
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
روبی
برای راحتی، میتوانید با مشخص کردن مسیر یک سند یا مجموعه به صورت یک رشته، که اجزای مسیر با یک اسلش ( / ) از هم جدا شدهاند، ارجاعات را ایجاد کنید. به عنوان مثال، برای ایجاد ارجاع به سند alovelace :
Web
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web
var alovelaceDocumentRef = db.doc('users/alovelace');
سویفت
let aLovelaceDocumentReference = db.document("users/alovelace")
هدف-سی
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");
جاوا
پایتون
Python
سی++
DocumentReference alovelace_document = db->Document("users/alovelace");
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
وحدت
DocumentReference documentRef = db.Document("users/alovelace");
سی شارپ
سی شارپ
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
روبی
دادههای سلسله مراتبی
برای درک نحوه عملکرد ساختارهای داده سلسله مراتبی در 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');
سویفت
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
هدف-سی
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");
جاوا
پایتون
Python
سی++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
نود جی اس
برو
پی اچ پی
پی اچ پی
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
وحدت
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
سی شارپ
سی شارپ
برای اطلاعات بیشتر در مورد نصب و ایجاد یک کلاینت Cloud Firestore ، به کتابخانههای کلاینت Cloud Firestore مراجعه کنید.
روبی
به الگوی متناوب مجموعهها و اسناد توجه کنید. مجموعهها و اسناد شما باید همیشه از این الگو پیروی کنند. شما نمیتوانید به یک مجموعه در یک مجموعه یا به یک سند در یک سند دیگر ارجاع دهید.
زیرمجموعهها به شما امکان میدهند دادهها را به صورت سلسله مراتبی ساختاردهی کنید و دسترسی به دادهها را آسانتر کنید. برای دریافت همه پیامهای موجود در roomA ، میتوانید یک ارجاع به مجموعه messages زیرمجموعه ایجاد کنید و مانند هر ارجاع به مجموعه دیگری با آن تعامل داشته باشید.
اسناد موجود در زیرمجموعهها میتوانند شامل زیرمجموعههای دیگری نیز باشند که به شما امکان میدهد دادههای بیشتری را در آنها جایگذاری کنید. میتوانید دادهها را تا عمق ۱۰۰ سطح در زیرمجموعهها قرار دهید.