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. في الواقع، هي كذلك. هناك بعض الاختلافات (على سبيل المثال، تتيح المستندات أنواع بيانات إضافية ويقتصر حجمها على 1 ميغابايت)، ولكن بشكل عام، يمكنك التعامل مع المستندات كسجلات JSON خفيفة الوزن.
المجموعات
تتوفّر المستندات في مجموعات، وهي مجرد حاويات للمستندات. على سبيل المثال، يمكنك إنشاء مجموعة users
تحتوي على مختلف المستخدمين، ويمثّل كل مستخدم مستند:
مستخدم
alovelace
first : "Ada"
last : "Lovelace"
born : 1815
aturingfirst : "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
Go
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
Go
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
Go
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"
roomB
...
بعد إنشاء غرف المحادثة، حدِّد طريقة تخزين رسائلك. قد لا تريد تخزينها في مستند غرفة المحادثة. يجب أن تكون المستندات في Cloud Firestore خفيفة الوزن، ويمكن أن تحتوي غرفة المحادثة على عدد كبير من الرسائل. ومع ذلك، يمكنك إنشاء مجموعات إضافية ضمن مستند غرفة المحادثة، وذلك كمجموعات فرعية.
المجموعات الفرعية
أفضل طريقة لتخزين الرسائل في هذا السيناريو هي استخدام مجموعات فرعية. المجموعة الفرعية هي مجموعة مرتبطة بمستند معيّن.
يمكنك إنشاء مجموعة فرعية باسم messages
لكل مستند غرفة في مجموعتك rooms
:
غرفة
roomA
name : "my chat room"
رسائل
message1
from : "alex"
msg : "Hello World!"
message2
...
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");
Java
Python
Python
C++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
Go
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 مستوى.