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