نموذج بيانات Cloud Firestore

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
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Python
a_lovelace_ref = db.collection("users").document("alovelace")

Python

a_lovelace_ref = db.collection("users").document("alovelace")
C++‎
DocumentReference alovelace_document_reference =
    db->Collection("users").Document("alovelace");
Node.js
const alovelaceDocumentRef = db.collection('users').doc('alovelace');
Go

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$document = $db->collection('samples/php/users')->document('alovelace');
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#‎

C#‎

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

DocumentReference documentRef = db.Collection("users").Document("alovelace");
لغة Ruby
document_ref = firestore.col("users").doc("alovelace")

المرجع هو كائن خفيف يشير فقط إلى موقع في قاعدة البيانات الخاصة بك. ويمكنك إنشاء مرجع سواء كانت البيانات موجودة أم لا، ولا يؤدي إنشاء مرجع إلى تنفيذ أي من عمليات الشبكة.

يمكنك أيضًا إنشاء مراجع للمجموعات:

Web

import { collection } from "firebase/firestore";

const usersCollectionRef = collection(db, 'users');

Web

var usersCollectionRef = db.collection('users');
Swift
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
let usersCollectionRef = db.collection("users")
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
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
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")

Python

users_ref = db.collection("users")
C++‎
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Go

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$collection = $db->collection('samples/php/users');
Unity
CollectionReference collectionRef = db.Collection("users");
C#‎

C#‎

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

CollectionReference collectionRef = db.Collection("users");
لغة Ruby
collection_ref = firestore.col "users"

ولتسهيل الأمر، يمكنك أيضًا إنشاء مراجع عن طريق تحديد المسار إلى مستند أو مجموعة كسلسلة، مع فصل مكونات المسار بشرطة مائلة للأمام (/). على سبيل المثال، لإنشاء مرجع إلى مستند alovelace:

Web

import { doc } from "firebase/firestore"; 

const alovelaceDocumentRef = doc(db, 'users/alovelace');

Web

var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
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
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Python
a_lovelace_ref = db.document("users/alovelace")

Python

a_lovelace_ref = db.document("users/alovelace")
C++‎
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Go

import (
	"cloud.google.com/go/firestore"
)

func createDocReferenceFromString(client *firestore.Client) {
	// Reference to a document with id "alovelace" in the collection "users"
	alovelaceRef := client.Doc("users/alovelace")

	_ = alovelaceRef
}
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$document = $db->document('users/alovelace');
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#‎

C#‎

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

DocumentReference documentRef = db.Document("users/alovelace");
لغة Ruby
document_path_ref = firestore.doc "users/alovelace"

البيانات الهرمية

لفهم كيفية عمل هياكل البيانات الهرمية في 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
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
ملاحظة: لا يتوفّر هذا المنتج ضمن نظامَي التشغيل WatchOS وApp Clip.
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
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Python
room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")

Python

room_a_ref = db.collection("rooms").document("roomA")
message_ref = room_a_ref.collection("messages").document("message1")
C++‎
DocumentReference message_reference = db->Collection("rooms")
    .Document("roomA")
    .Collection("messages")
    .Document("message1");
Node.js
const messageRef = db.collection('rooms').doc('roomA')
  .collection('messages').doc('message1');
Go

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unity
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#‎

C#‎

لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
لغة Ruby
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

لاحظ النمط البديل للمجموعات والمستندات. يجب أن تتبع مجموعاتك ووثائقك هذا النمط دائمًا. لا يمكنك الإشارة إلى مجموعة في مجموعة أو مستند في مستند.

تسمح لك المجموعات الفرعية بهيكلة البيانات بشكل هرمي، مما يسهل الوصول إلى البيانات. للحصول على جميع الرسائل في "roomA"، يمكنك إنشاء مرجع مجموعة إلى المجموعة الفرعية messages والتفاعل معها كما تفعل مع أي مرجع مجموعة آخر.

يمكن أن تحتوي المستندات الموجودة في المجموعات الفرعية أيضًا على مجموعات فرعية، مما يسمح لك بتضمين البيانات بشكل أكبر. يمكنك دمج البيانات حتى 100 مستوى.