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');
Swift
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-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");
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+KTX
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+KTX
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
لتخزين غرف محادثة مختلفة:
غرفتان (
)غرفة واحدة (
) أname : "my chat room"
غرفة واحدة (
)...
الآن بعد أن أصبحت لديك غرف محادثة، حدِّد كيفية تخزين رسائلك. قد لا ترغب في تخزينها في وثيقة غرفة الدردشة. يجب أن تكون المستندات في Cloud Firestore خفيفة، ويمكن أن تحتوي غرفة الدردشة على عدد كبير من الرسائل. ومع ذلك، يمكنك إنشاء مجموعات إضافية داخل مستند غرفة الدردشة، كمجموعات فرعية.
المجموعات الفرعية
أفضل طريقة لتخزين الرسائل في هذا السيناريو هي استخدام المجموعات الفرعية. المجموعة الفرعية هي مجموعة مرتبطة بوثيقة محددة.
يمكنك إنشاء مجموعة فرعية تُسمى messages
لكل مستند غرفة في مجموعة rooms
:
غرفتان (
)غرفة واحدة (
) أname : "my chat room"
رسائل
رسالة1
from : "alex"
msg : "Hello World!"
رسالة2
...
غرفة واحدة (
)...
في هذا المثال، يمكنك إنشاء مرجع إلى رسالة في المجموعة الفرعية بالتعليمة البرمجية التالية:
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+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");
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 مستوى.