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
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
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
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
رفتن
PHP
PHP
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
سی شارپ
سی شارپ
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Ruby
مرجع شیء سبکی است که فقط به مکانی در پایگاه داده شما اشاره میکند. میتوانید مرجعی ایجاد کنید، چه دادهای در آنجا وجود داشته باشد یا نه، و ایجاد مرجع هیچ عملیات شبکهای انجام نمیدهد.
همچنین میتوانید به مجموعهها ارجاع دهید:
Web
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web
var usersCollectionRef = db.collection('users');
Swift
let usersCollectionRef = db.collection("users")
Objective-C
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
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
رفتن
PHP
PHP
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Unity
CollectionReference collectionRef = db.Collection("users");
سی شارپ
سی شارپ
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Ruby
برای راحتی کار، میتوانید با مشخص کردن مسیر سند یا مجموعه بهصورت رشته، با مؤلفههای مسیر جداشده با خط مورب (/)، مرجع ایجاد کنید. برای مثال، برای ایجاد مرجع به سند alovelace:
Web
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
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
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
رفتن
PHP
PHP
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
سی شارپ
سی شارپ
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Ruby
دادههای سلسلهمراتبی
برای درک نحوه عملکرد ساختارهای داده سلسلهمراتبی در 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
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
Objective-C
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
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
رفتن
PHP
PHP
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Unity
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
سی شارپ
سی شارپ
برای کسب اطلاعات بیشتر درباره نصب و ایجاد کارخواه Cloud Firestore، به کتابخانههای کارخواه Cloud Firestore مراجعه کنید.
Ruby
به الگوی متناوب مجموعهها و اسناد توجه کنید. مجموعهها و اسناد شما باید همیشه از این الگو پیروی کنند. نمیتوانید به مجموعهای در مجموعه دیگر یا سندی در سند دیگر ارجاع دهید.
زیرمجموعهها به شما امکان میدهند دادهها را بهصورت سلسلهمراتبی ساختاربندی کنید و دسترسی به دادهها را آسانتر کنید. برای دریافت همه پیامها در roomA، میتوانید مرجع مجموعهای برای زیرمجموعه messages ایجاد کنید و مانند هر مرجع مجموعه دیگری با آن تعامل داشته باشید.
اسناد موجود در زیرمجموعهها میتوانند شامل زیرمجموعهها نیز باشند، که به شما امکان میدهد دادهها را بیشتر تودرتو کنید. میتوانید دادهها را تا ۱۰۰ سطح تودرتو کنید.