Google is committed to advancing racial equity for Black communities. See how.
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

Cloud Firestore مدل داده

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

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

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

مجموعه ها و اسناد به طور ضمنی در 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 . برای مراجعه به این مکان در کد خود ، می توانید مرجعی به آن ایجاد کنید.

وب
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
سریع
let alovelaceDocumentRef = db.collection("users").document("alovelace")
هدف-C
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

جاوا

DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

کوتلین + KTX

val alovelaceDocumentRef = db.collection("users").document("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')
++ 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('users')->document('lovelace');
وحدت
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C #
DocumentReference documentRef = db.Collection("users").Document("alovelace");
یاقوت
document_ref = firestore.col("users").doc("alovelace")

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

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

وب
var usersCollectionRef = db.collection('users');
سریع
let usersCollectionRef = db.collection("users")
هدف-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

جاوا

CollectionReference usersCollectionRef = db.collection("users");

کوتلین + KTX

val usersCollectionRef = db.collection("users")
جاوا
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
پایتون
users_ref = db.collection(u'users')
++ C
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
برو
usersRef := client.Collection("users")
PHP
$collection = $db->collection('users');
وحدت
CollectionReference collectionRef = db.Collection("users");
C #
CollectionReference collectionRef = db.Collection("users");
یاقوت
collection_ref = firestore.col "users"

برای راحتی کار ، می توانید با تعیین مسیر به یک سند یا مجموعه به صورت رشته ای ، م componentsلفه های مسیر را با یک برش رو به جلو ( / ) مشخص کنید. به عنوان مثال ، برای ایجاد مرجع به سند alovelace :

وب
var alovelaceDocumentRef = db.doc('users/alovelace');
سریع
let aLovelaceDocumentReference = db.document("users/alovelace")
هدف-C
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

جاوا

DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

کوتلین + KTX

val alovelaceDocumentRef = db.document("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')
++ 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");
C #
DocumentReference documentRef = db.Document("users/alovelace");
یاقوت
document_path_ref = firestore.doc "users/alovelace"

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

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

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

  • اتاق

    • A

      name : "my chat room"

    • B

      ...

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

زیر مجموعه ها

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

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

  • اتاق

    • A

      name : "my chat room"

      • های_برنامه های

        • 1

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

        • 2

          ...

    • B

      ...

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

وب
var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
سریع
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
هدف-C
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

جاوا

DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

کوتلین + KTX

val messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("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')
++ 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");
C #
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 سطح لانه کنید.