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 في انتظار الردّ
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");
Java
Python
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");
#C
#C
لمزيد من المعلومات حول تثبيت عميل 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");
Java
Python
Python
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
متابعة
PHP
PHP
لمزيد من المعلومات عن تثبيت عميل Cloud Firestore وإنشائه، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.
Unity
CollectionReference collectionRef = db.Collection("users");
#C
#C
لمزيد من المعلومات حول تثبيت عميل 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");
Java
Python
Python
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
متابعة
PHP
PHP
لمزيد من المعلومات عن تثبيت عميل Cloud Firestore وإنشائه، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.
Unity
DocumentReference documentRef = db.Document("users/alovelace");
#C
#C
لمزيد من المعلومات عن تثبيت عميل Cloud Firestore وإنشائه، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.
لغة Ruby
البيانات الهرمية
لفهم طريقة عمل بُنى البيانات الهرمية في Cloud Firestore، لنفترض أنّ لدينا تطبيق محادثات يتضمّن رسائل وغرف محادثة.
يمكنك إنشاء مجموعة باسم rooms لتخزين غرف محادثة مختلفة:
غرفة
roomA
name : "my chat room"غرفة
...
بعد إنشاء غرف المحادثة، عليك تحديد كيفية تخزين رسائلك. قد لا ترغب في تخزينها في مستند غرفة المحادثة. يجب أن تكون المستندات في Cloud Firestore خفيفة، ويمكن أن تحتوي غرفة المحادثة على عدد كبير من الرسائل. ومع ذلك، يمكنك إنشاء مجموعات إضافية داخل مستند غرفة المحادثة، كمجموعات فرعية.
المجموعات الفرعية
أفضل طريقة لتخزين الرسائل في هذا السيناريو هي استخدام المجموعات الفرعية. المجموعة الفرعية هي مجموعة مرتبطة بمستند معيّن.
يمكنك إنشاء مجموعة فرعية باسم messages لكل مستند غرفة في
مجموعة rooms:
غرفة
roomA
name : "my chat room" رسالة
message1
from : "alex"
msg : "Hello World!"message2
...
غرفة
...
في هذا المثال، يمكنك إنشاء مرجع لرسالة في المجموعة الفرعية باستخدام الرمز التالي:
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");
Java
Python
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");
#C
#C
لمزيد من المعلومات عن تثبيت عميل Cloud Firestore وإنشائه، يُرجى الرجوع إلى مكتبات عملاء Cloud Firestore.
لغة Ruby
لاحظ النمط المتناوب للمجموعات والمستندات. يجب أن تتبع مجموعاتك ومستنداتك دائمًا هذا النمط. لا يمكنك الإشارة إلى مجموعة في مجموعة أو مستند في مستند.
تتيح لك المجموعات الفرعية تنظيم البيانات بشكل هرمي، ما يسهّل الوصول إليها. للحصول على جميع الرسائل في roomA، يمكنك إنشاء مرجع مجموعة
للمجموعة الفرعية messages والتفاعل معها مثل أي
مرجع مجموعة آخر.
يمكن أن تحتوي المستندات في المجموعات الفرعية على مجموعات فرعية أيضًا، ما يتيح لك تداخل البيانات بشكل أكبر. يمكنك دمج البيانات حتى 100 مستوى.