نموذج بيانات 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");
جافا
// 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');
انتقال

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");
جافا
// 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');
انتقال

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");
جافا
// 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');
انتقال

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");
جافا
// 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');
انتقال

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 وتتفاعل معها كما تفعل مع أي مجموعة أخرى مرجع المجموعة.

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