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 modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users', 'alovelace');
Web namespaced API
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
سويفت
let alovelaceDocumentRef = db.collection("users").document("alovelace")
ج موضوعية
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
سي ++
DocumentReference alovelace_document_reference = db->Collection("users").Document("alovelace");
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
DocumentReference documentRef = db.Collection("users").Document("alovelace");
ج #
ج#
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
روبي
المرجع هو كائن خفيف الوزن يشير فقط إلى موقع في قاعدة البيانات الخاصة بك. يمكنك إنشاء مرجع سواء كانت البيانات موجودة هناك أم لا، ولا يؤدي إنشاء مرجع إلى إجراء أية عمليات على الشبكة.
يمكنك أيضًا إنشاء مراجع للمجموعات :
Web modular API
import { collection } from "firebase/firestore"; const usersCollectionRef = collection(db, 'users');
Web namespaced API
var usersCollectionRef = db.collection('users');
سويفت
let usersCollectionRef = db.collection("users")
ج موضوعية
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
سي ++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
CollectionReference collectionRef = db.Collection("users");
ج#
ج#
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
روبي
للسهولة، يمكنك أيضًا إنشاء مراجع عن طريق تحديد المسار إلى مستند أو مجموعة كسلسلة، مع فصل مكونات المسار بشرطة مائلة للأمام ( /
). على سبيل المثال، لإنشاء مرجع إلى مستند alovelace
:
Web modular API
import { doc } from "firebase/firestore"; const alovelaceDocumentRef = doc(db, 'users/alovelace');
Web namespaced API
var alovelaceDocumentRef = db.doc('users/alovelace');
سويفت
let aLovelaceDocumentReference = db.document("users/alovelace")
ج موضوعية
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
سي ++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
DocumentReference documentRef = db.Document("users/alovelace");
ج #
ج #
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
روبي
البيانات الهرمية
لفهم كيفية عمل هياكل البيانات الهرمية في Cloud Firestore، فكر في مثال لتطبيق الدردشة مع الرسائل وغرف الدردشة.
يمكنك إنشاء مجموعة تسمى rooms
لتخزين غرف الدردشة المختلفة:
غرفة
أname : "my chat room"
غرفة
ب...
الآن بعد أن أصبح لديك غرف دردشة، قرر كيفية تخزين رسائلك. قد لا ترغب في تخزينها في مستند غرفة الدردشة. يجب أن تكون المستندات الموجودة في Cloud Firestore خفيفة الوزن، ويمكن أن تحتوي غرفة الدردشة على عدد كبير من الرسائل. ومع ذلك، يمكنك إنشاء مجموعات إضافية داخل مستند غرفة الدردشة الخاصة بك، كمجموعات فرعية.
المجموعات الفرعية
أفضل طريقة لتخزين الرسائل في هذا السيناريو هي باستخدام المجموعات الفرعية. المجموعة الفرعية هي مجموعة مرتبطة بمستند معين.
يمكنك إنشاء مجموعة فرعية تسمى messages
لكل مستند غرفة في مجموعة rooms
:
غرفة
أname : "my chat room"
رسالة
1from : "alex"
msg : "Hello World!"
رسالة
2...
غرفة
ب...
في هذا المثال، يمكنك إنشاء مرجع لرسالة في المجموعة الفرعية بالكود التالي:
Web modular API
import { doc } from "firebase/firestore"; const messageRef = doc(db, "rooms", "roomA", "messages", "message1");
Web namespaced API
var messageRef = db.collection('rooms').doc('roomA') .collection('messages').doc('message1');
سويفت
let messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1")
ج موضوعية
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
سي ++
DocumentReference message_reference = db->Collection("rooms") .Document("roomA") .Collection("messages") .Document("message1");
Node.js
يذهب
بي أتش بي
بي أتش بي
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
وحدة
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
ج#
ج#
لمعرفة المزيد حول تثبيت وإنشاء عميل Cloud Firestore، راجع مكتبات عميل Cloud Firestore .
روبي
لاحظ النمط المتناوب للمجموعات والوثائق. يجب أن تتبع مجموعاتك ومستنداتك هذا النمط دائمًا. لا يمكنك الإشارة إلى مجموعة في مجموعة أو مستند في مستند.
تسمح لك المجموعات الفرعية ببناء البيانات بشكل هرمي، مما يسهل الوصول إلى البيانات. للحصول على كافة الرسائل في roomA
، يمكنك إنشاء مرجع مجموعة messages
المجموعة الفرعية والتفاعل معها كما تفعل مع أي مرجع مجموعة آخر.
يمكن أن تحتوي المستندات الموجودة في المجموعات الفرعية على مجموعات فرعية أيضًا، مما يسمح لك بدمج البيانات بشكل أكبر. يمكنك تداخل البيانات حتى عمق 100 مستوى.