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
المستخدمين المختلفين، وكل واحد منهم يمثّل مستندًا:
مستخدم
حبة واحدة (
)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+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
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+KTX
val usersCollectionRef = db.collection("users")
Java
CollectionReference usersCollectionRef = db.collection("users");
Dart
final usersCollectionRef = db.collection("users");
جافا
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+KTX
val alovelaceDocumentRef = db.document("users/alovelace")
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
جافا
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
لتخزين غرف محادثة مختلفة:
غرفتان (
)غرفة أ
name : "my chat room"
غرفة واحدة (
)...
الآن بعد أن أصبح لديك غرف محادثة، يمكنك تحديد كيفية تخزين رسائلك. قد لا تريد تخزينها في مستند غرفة المحادثة. يجب أن تكون المستندات في Cloud Firestore خفيفة الوزن، ويمكن أن تحتوي غرفة المحادثة على عدد كبير من الرسائل. ومع ذلك، يمكنك إنشاء مجموعات إضافية ضمن مستند غرفة المحادثة، كمجموعات فرعية.
المجموعات الفرعية
أفضل طريقة لتخزين الرسائل في هذا السيناريو هي استخدام المجموعات الفرعية. حاسمة المجموعة الفرعية هي مجموعة مرتبطة بوثيقة محددة.
يمكنك إنشاء مجموعة فرعية باسم messages
لكل مستند غرفة في
مجموعة rooms
:
غرفتان (
)غرفة واحدة (
) أname : "my chat room"
الرسائل
رسالة1
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+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
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
والتفاعل معه كما تتفاعل مع أي مرجع مجموعة
آخر.
يمكن أن تحتوي المستندات الموجودة في المجموعات الفرعية على مجموعات فرعية أيضًا، مما يسمح لك مزيد من بيانات Nest. يمكنك تداخل البيانات حتى 100 مستوى.