Check out what’s new from Firebase at Google I/O 2022. Learn more

مدل Cloud Firestore Data

ابر Firestore های NoSQL، پایگاه داده، سند گرا است. بر خلاف یک پایگاه داده SQL، هیچ جداول و یا ردیف وجود دارد. در عوض، شما داده ها در اسناد ، که به مجموعه سازمان یافته ذخیره کنید.

هر سند شامل مجموعه ای از جفت کلید-مقدار. ابر Firestore برای ذخیره سازی مجموعه های بزرگ از اسناد کوچک بهینه شده است.

همه اسناد باید در مجموعه ذخیره می شود. اسناد می تواند شامل زیر مجموعه های تو در تو و اشیاء، که هر دو می تواند شامل زمینه بدوی مانند رشته و یا اشیاء پیچیده مانند لیست.

مجموعه ها و اسناد به طور ضمنی در ابر Firestore ایجاد شده است. به سادگی داده اختصاص به یک سند در یک مجموعه است. اگر یکی از مجموعه یا سند وجود ندارد، ابر Firestore آن ایجاد می کند.

اسناد

در ابر Firestore، واحد ذخیره سازی سند است. یک سند یک رکورد سبک وزن است که شامل زمینه های، که نقشه را به ارزش ها است. هر سند با یک نام شناخته شده است.

یک سند به نمایندگی از کاربران alovelace ممکن شبیه به این:

  • alovelace

    first : "Ada"
    last : "Lovelace"
    born : 1815

مجتمع، اشیاء تو در تو در یک سند نقشه نامیده می شود. به عنوان مثال، شما می توانید از نام کاربر از مثال بالا با نقشه، مثل این ساختار:

  • alovelace

    name :
    first : "Ada"
    last : "Lovelace"
    born : 1815

شما ممکن است متوجه شود که اسناد بسیار شبیه JSON. در واقع، آنها اساسا به. برخی از تفاوت های (به عنوان مثال، اسناد پشتیبانی از انواع داده های اضافی و در اندازه تا 1 MB محدود)، اما به طور کلی، شما می توانید اسناد به عنوان سوابق JSON بسیار سبک وزن و درمان وجود دارد.

مجموعه ها

اسناد در مجموعه، که به سادگی می ظروف برای اسناد زندگی می کنند. به عنوان مثال، شما می توانید یک دارند users مجموعه حاوی کاربران مختلف خود را، هر کدام با یک سند:

  • کاربران

    • alovelace

      first : "Ada"
      last : "Lovelace"
      born : 1815

    • aturing

      first : "Alan"
      last : "Turing"
      born : 1912

ابر Firestore بدون طرح است، بنابراین شما باید آزادی کامل بیش از آنچه که زمینه های شما در هر سند قرار داده و چه نوع داده های شما را در این زمینه ها را ذخیره کنید. اسناد در مجموعه همان همه را می تواند شامل زمینه های مختلف و یا ذخیره انواع مختلف داده ها در این زمینه ها. با این حال، یک ایده خوب برای استفاده از زمینه های مشابه و انواع داده در سراسر اسناد متعدد است، به طوری که شما می توانید این اسناد را به راحتی پرس و جو.

مجموعه شامل اسناد و هیچ چیز دیگری. این به طور مستقیم نمی تواند شامل زمینه های خام با ارزش، و آن را می تواند شامل مجموعه های دیگر نیست. (نگاه کنید به سلسله مراتبی داده برای توضیح چگونه به ساختار داده های پیچیده تر در ابر Firestore.)

نام اسناد در یک مجموعه منحصر به فرد هستند. شما می توانید کلید خود را ارائه می کنند، مانند شناسه کاربر، و یا شما می توانید اجازه دهید ابر Firestore ایجاد شناسه تصادفی برای شما به صورت خودکار.

شما به "ایجاد" و یا مجموعه های "حذف" نیاز ندارد. بعد از اینکه شما اولین سند در یک مجموعه، مجموعه وجود دارد. اگر شما حذف تمام اسناد و مدارک را در یک مجموعه، آن دیگر وجود ندارد.

منابع

هر سند در ابر 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');
سریع
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
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");
جاوا
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
پایتون
a_lovelace_ref = db.collection(u'users').document(u'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');
برو
alovelaceRef := client.Collection("users").Doc("alovelace")
PHP
$document = $db->collection('samples/php/users')->document('lovelace');
وحدت
DocumentReference documentRef = db.Collection("users").Document("alovelace");
سی شارپ
DocumentReference documentRef = db.Collection("users").Document("alovelace");
یاقوت سرخ
document_ref = firestore.col("users").doc("alovelace")

مرجع یک شی سبک وزن است که نقاط فقط به یک مکان در پایگاه داده خود را است. شما می توانید یک مرجع آیا یا نه داده وجود دارد وجود دارد، ایجاد و ایجاد یک مرجع هیچ عملیات شبکه مقدور نیست.

شما همچنین می توانید ارجاع به مجموعه ایجاد:

Web version 9

import { collection } from "firebase/firestore";

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

Web version 8

var usersCollectionRef = db.collection('users');
سریع
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
let usersCollectionRef = db.collection("users")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
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");
جاوا
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
پایتون
users_ref = db.collection(u'users')

Python

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
برو
usersRef := client.Collection("users")
PHP
$collection = $db->collection('samples/php/users');
وحدت
CollectionReference collectionRef = db.Collection("users");
سی شارپ
CollectionReference collectionRef = db.Collection("users");
یاقوت سرخ
collection_ref = firestore.col "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');
سریع
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
let aLovelaceDocumentReference = db.document("users/alovelace")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
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");
جاوا
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
پایتون
a_lovelace_ref = db.document(u'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');
برو
alovelaceRef := client.Doc("users/alovelace")
PHP
$document = $db->document('users/lovelace');
وحدت
DocumentReference documentRef = db.Document("users/alovelace");
سی شارپ
DocumentReference documentRef = db.Document("users/alovelace");
یاقوت سرخ
document_path_ref = firestore.doc "users/alovelace"

سلسله مراتبی داده

برای درک چگونگی سلسله مراتبی ساختمان داده در ابر Firestore کار می کنند، در نظر گرفتن یک برنامه چت به عنوان مثال با پیام ها و اتاق های گفتگو.

شما می توانید یک مجموعه به نام ایجاد rooms برای ذخیره اتاق های مختلف چت:

  • اتاق

    • roomA

      name : "my chat room"

    • roomB

      ...

حالا که شما از اتاق های چت، تصمیم می گیرید که چگونه برای ذخیره پیام های خود را. شما ممکن است بخواهید آنها را در سند اتاق چت است. اسناد و مدارک در ابر Firestore باید بسیار سبک وزن و، و یک اتاق چت می تواند تعداد زیادی از پیام های حاوی. با این حال، شما می توانید مجموعه های اضافی در داخل سند اتاق چت خود را، به عنوان زیر مجموعه ایجاد کنید.

زیر مجموعه

بهترین راه برای ذخیره پیام در این سناریو است با استفاده از زیر مجموعه. زیرمجموعه یک مجموعه مرتبط با یک سند خاص است.

شما می توانید یک زیرمجموعه به نام ایجاد messages برای هر سند در اتاق خود را rooms مجموعه:

  • اتاق

    • roomA

      name : "my chat room"

      • پیام

        • message1

          from : "alex"
          msg : "Hello World!"

        • message2

          ...

    • roomB

      ...

در این مثال، شما می توانید یک مرجع به یک پیام در زیرمجموعه با کد زیر ایجاد کنید:

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');
سریع
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
هدف-C
توجه: این محصول در اهداف watchOS و App Clip موجود نیست.
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");
جاوا
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
پایتون
room_a_ref = db.collection(u'rooms').document(u'roomA')
message_ref = room_a_ref.collection(u'messages').document(u'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');
برو
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
PHP
$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");
یاقوت سرخ
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

توجه داشته باشید که الگوی متناوب از مجموعه ها و اسناد. مجموعه ها و اسناد خود را همیشه باید از این الگو پیروی. شما می توانید یک مجموعه در یک مجموعه و یا یک سند در سند ارجاع بدهد.

زیر مجموعه اجازه می دهد شما را به ساختار سلسله مراتبی داده، و داده های ساده تر برای دسترسی. برای دریافت تمام پیام ها در roomA ، شما می توانید یک مرجع مجموعه به زیرمجموعه ایجاد messages و تعامل با آن مثل شما که هر مرجع مجموعه های دیگر است.

اسناد و مدارک در زیر مجموعه می تواند شامل زیر مجموعه به عنوان خوب، به شما این امکان داده لانه بیشتر است. شما می توانید داده لانه تا 100 سطح عمیق.