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"];
Java
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");
Kotlin+KTX
val 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
اذهب
بي أتش بي
$document = $db->collection('samples/php/users')->document('lovelace');
وحدة
DocumentReference documentRef = db.Collection("users").Document("alovelace");
سي #
DocumentReference documentRef = db.Collection("users").Document("alovelace");
روبي
المرجع هو كائن خفيف يشير فقط إلى موقع في قاعدة البيانات الخاصة بك. يمكنك إنشاء مرجع سواء كانت البيانات موجودة أم لا ، ولا يؤدي إنشاء مرجع إلى تنفيذ أي عمليات على الشبكة.
يمكنك أيضًا إنشاء مراجع للمجموعات :
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"];
Java
CollectionReference usersCollectionRef = db.collection("users");
Kotlin+KTX
val usersCollectionRef = db.collection("users")
Dart
final usersCollectionRef = db.collection("users");
جافا
بايثون
Python
سي ++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
اذهب
بي أتش بي
$collection = $db->collection('samples/php/users');
وحدة
CollectionReference collectionRef = db.Collection("users");
سي #
CollectionReference collectionRef = db.Collection("users");
روبي
لتسهيل الأمر ، يمكنك أيضًا إنشاء مراجع عن طريق تحديد المسار إلى مستند أو مجموعة كسلسلة ، مع فصل مكونات المسار بشرطة مائلة للأمام ( /
). على سبيل المثال ، لإنشاء مرجع إلى مستند 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"];
Java
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");
Kotlin+KTX
val alovelaceDocumentRef = db.document("users/alovelace")
Dart
final aLovelaceDocRef = db.doc("users/alovelace");
جافا
بايثون
Python
سي ++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
اذهب
بي أتش بي
$document = $db->document('users/lovelace');
وحدة
DocumentReference documentRef = db.Document("users/alovelace");
سي #
DocumentReference documentRef = db.Document("users/alovelace");
روبي
البيانات الهرمية
لفهم كيفية عمل هياكل البيانات الهرمية في 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"];
Java
DocumentReference messageRef = db .collection("rooms").document("roomA") .collection("messages").document("message1");
Kotlin+KTX
val 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
اذهب
بي أتش بي
$document = $db ->collection('rooms') ->document('roomA') ->collection('messages') ->document('message1');
وحدة
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
سي #
DocumentReference documentRef = db .Collection("Rooms").Document("RoomA") .Collection("Messages").Document("Message1");
روبي
لاحظ النمط المتناوب للمجموعات والمستندات. يجب أن تتبع مجموعاتك ووثائقك هذا النمط دائمًا. لا يمكنك الرجوع إلى مجموعة في مجموعة أو مستند في مستند.
تتيح لك المجموعات الفرعية هيكلة البيانات بشكل هرمي ، مما يسهل الوصول إلى البيانات. للحصول على جميع الرسائل في roomA
، يمكنك إنشاء مرجع مجموعة messages
المجموعة الفرعية والتفاعل معها كما تفعل مع أي مرجع مجموعة آخر.
يمكن أن تحتوي المستندات الموجودة في المجموعات الفرعية على مجموعات فرعية أيضًا ، مما يتيح لك مزيدًا من البيانات المتداخلة. يمكنك تداخل البيانات حتى عمق 100 مستوى.