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');
سویفت
let alovelaceDocumentRef = db.collection("users").document("alovelace")
هدف-C
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");
جاوا
پایتون
Python
C++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت 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")
هدف-C
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");
جاوا
پایتون
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت 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")
هدف-C
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");
جاوا
پایتون
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت 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")
هدف-C
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");
جاوا
پایتون
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
برو
PHP
PHP
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت Cloud Firestore ، به کتابخانه های سرویس گیرنده Cloud Firestore مراجعه کنید.
وحدت
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
سی شارپ
سی شارپ
برای اطلاعات بیشتر در مورد نصب و ایجاد کلاینت Cloud Firestore ، به کتابخانه های سرویس گیرنده Cloud Firestore مراجعه کنید.
یاقوت سرخ
به الگوی متناوب مجموعه ها و اسناد توجه کنید. مجموعه ها و اسناد شما باید همیشه از این الگو پیروی کنند. شما نمی توانید به یک مجموعه در یک مجموعه یا یک سند در یک سند ارجاع دهید.
مجموعه های فرعی به شما امکان می دهند داده ها را به صورت سلسله مراتبی ساختار دهید و دسترسی به داده ها را آسان تر می کند. برای دریافت همه پیامها در roomA
، میتوانید یک مرجع مجموعه برای messages
زیر مجموعه ایجاد کنید و مانند هر مرجع مجموعه دیگری با آن تعامل کنید.
اسناد موجود در مجموعههای فرعی میتوانند شامل مجموعههای فرعی نیز باشند، که به شما امکان میدهند دادههای تودرتو بیشتر کنید. می توانید داده ها را تا عمق 100 سطح تودرتو کنید.