Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Cloud Firestore Veri modeli

Cloud Firestore, NoSQL, belge odaklı bir veritabanıdır. SQL veritabanından farklı olarak, tablo veya satır yoktur. Bunun yerine, koleksiyonlar halinde organize edilir belgeleri, veri depolamak.

Her bir belge anahtar değer çiftleri kümesini içerir. Cloud Firestore, büyük küçük belge koleksiyonlarını depolamak için optimize edilmiştir.

Tüm belgeler koleksiyonlarda saklanmalıdır. Belgeler listeleri gibi dizeleri veya karmaşık nesneler gibi ilkel alanları içerebilir, her ikisi de subcollections ve iç içe nesneleri içerebilir.

Koleksiyonlar ve belgeler, Cloud Firestore'da dolaylı olarak oluşturulur. Bir koleksiyon içindeki bir belgeye veri atamanız yeterlidir. Koleksiyon veya belge yoksa, Cloud Firestore onu oluşturur.

Belgeler

Cloud Firestore'da depolama birimi belgedir. Belge, değerlerle eşleşen alanları içeren hafif bir kayıttır. Her belge bir adla tanımlanır.

Bir kullanıcı temsil eden bir belge alovelace şöyle olabilir:

  • alovelace

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

Bir belgedeki karmaşık, iç içe nesnelere haritalar denir. Örneğin, yukarıdaki örnekteki kullanıcının adını aşağıdaki gibi bir harita ile yapılandırabilirsiniz:

  • alovelace

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

Belgelerin JSON'a çok benzediğini fark edebilirsiniz. Aslında, temelde öyleler. Bazı farklılıklar vardır (örneğin, belgeler ek veri türlerini destekler ve boyut olarak 1 MB ile sınırlıdır), ancak genel olarak belgeleri hafif JSON kayıtları olarak değerlendirebilirsiniz.

Koleksiyonlar

Belgeler, yalnızca belgeler için kapsayıcı olan koleksiyonlarda yaşar. Örneğin, bir olabilir users sizin çeşitli kullanıcıları, bir belgenin temsil her içerecek şekilde toplanmasını:

  • kullanıcıları

    • alovelace

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

    • aturing

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

Cloud Firestore şemasızdır, bu nedenle her belgeye hangi alanları koyacağınız ve bu alanlarda hangi veri türlerini depolayacağınız konusunda tam bir özgürlüğe sahipsiniz. Aynı koleksiyondaki belgelerin tümü farklı alanlar içerebilir veya bu alanlarda farklı veri türleri depolayabilir. Ancak, belgeleri daha kolay sorgulayabilmeniz için aynı alanları ve veri türlerini birden çok belgede kullanmak iyi bir fikirdir.

Bir koleksiyon belgeler içerir ve başka hiçbir şey içermez. Değerleri olan ham alanları doğrudan içeremez ve diğer koleksiyonları içeremez. (Bkz Hiyerarşik Veri Bulut Firestore daha karmaşık veri yapısı hakkında açıklama için).

Bir koleksiyon içindeki belgelerin adları benzersizdir. Kullanıcı kimlikleri gibi kendi anahtarlarınızı sağlayabilir veya Cloud Firestore'un sizin için otomatik olarak rastgele kimlikler oluşturmasına izin verebilirsiniz.

Koleksiyonları "oluşturmanıza" veya "silmenize" gerek yoktur. Bir koleksiyondaki ilk belgeyi oluşturduktan sonra koleksiyon var olur. Bir koleksiyondaki tüm belgeleri silerseniz, artık mevcut olmaz.

Referanslar

Cloud Firestore'daki her belge, veritabanındaki konumuyla benzersiz bir şekilde tanımlanır. Önceki örnek belge gösterdi alovelace koleksiyonu dahilinde users . Kodunuzdaki bu konuma bakın, bunu bir başvuru oluşturabilirsiniz.

Web sürümü 9

import { doc } from "firebase/firestore";

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

Web sürümü 8

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Süratli
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Amaç-C
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")
Java
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
piton
a_lovelace_ref = db.collection(u'users').document(u'alovelace')

piton

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');
Gitmek
alovelaceRef := client.Collection("users").Doc("alovelace")
PHP
$document = $db->collection('samples/php/users')->document('lovelace');
Birlik
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#
DocumentReference documentRef = db.Collection("users").Document("alovelace");
yakut
document_ref = firestore.col("users").doc("alovelace")

Referans, yalnızca veritabanınızdaki bir konuma işaret eden hafif bir nesnedir. Orada veri bulunsun veya bulunmasın bir referans oluşturabilirsiniz ve referans oluşturmak herhangi bir ağ işlemi gerçekleştirmez.

Ayrıca koleksiyonlarına referanslar oluşturabilirsiniz:

Web sürümü 9

import { collection } from "firebase/firestore";

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

Web sürümü 8

var usersCollectionRef = db.collection('users');
Süratli
let usersCollectionRef = db.collection("users")
Amaç-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Java

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

Kotlin+KTX

val usersCollectionRef = db.collection("users")
Java
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
piton
users_ref = db.collection(u'users')

piton

users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Gitmek
usersRef := client.Collection("users")
PHP
$collection = $db->collection('samples/php/users');
Birlik
CollectionReference collectionRef = db.Collection("users");
C#
CollectionReference collectionRef = db.Collection("users");
yakut
collection_ref = firestore.col "users"

Yol bileşenleri eğik çizgi (ayrılmış olan rahatlığı için, ayrıca, bir dize olarak bir belge veya koleksiyona yolu belirterek referanslar oluşturabilirsiniz / ). Örneğin, bir referans oluşturmak için alovelace belge:

Web sürümü 9

import { doc } from "firebase/firestore"; 

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

Web sürümü 8

var alovelaceDocumentRef = db.doc('users/alovelace');
Süratli
let aLovelaceDocumentReference = db.document("users/alovelace")
Amaç-C
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Java

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

Kotlin+KTX

val alovelaceDocumentRef = db.document("users/alovelace")
Java
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
piton
a_lovelace_ref = db.document(u'users/alovelace')

piton

a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Gitmek
alovelaceRef := client.Doc("users/alovelace")
PHP
$document = $db->document('users/lovelace');
Birlik
DocumentReference documentRef = db.Document("users/alovelace");
C#
DocumentReference documentRef = db.Document("users/alovelace");
yakut
document_path_ref = firestore.doc "users/alovelace"

Hiyerarşik Veriler

Cloud Firestore'da hiyerarşik veri yapılarının nasıl çalıştığını anlamak için mesajlar ve sohbet odaları içeren örnek bir sohbet uygulamasını düşünün.

Sen adında bir koleksiyon oluşturabilirsiniz rooms farklı sohbet odaları saklamak için:

  • odaları

    • rooma

      name : "my chat room"

    • roomB

      ...

Artık sohbet odalarınız olduğuna göre, mesajlarınızı nasıl saklayacağınıza karar verin. Bunları sohbet odasının belgesinde saklamak istemeyebilirsiniz. Cloud Firestore'daki belgeler hafif olmalıdır ve bir sohbet odası çok sayıda mesaj içerebilir. Ancak, sohbet odanızın belgesinde alt koleksiyonlar olarak ek koleksiyonlar oluşturabilirsiniz.

alt koleksiyonlar

Bu senaryoda iletileri depolamanın en iyi yolu alt koleksiyonları kullanmaktır. Alt koleksiyon, belirli bir belgeyle ilişkili bir koleksiyondur.

Bir subcollection denilen oluşturabilir messages sizin her odada belgesi için rooms koleksiyonu:

  • odaları

    • rooma

      name : "my chat room"

      • mesajları

        • message1

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

        • mesajı 2

          ...

    • roomB

      ...

Bu örnekte, aşağıdaki kodla alt koleksiyondaki bir mesaja referans oluşturacaksınız:

Web sürümü 9

import { doc } from "firebase/firestore"; 

const messageRef = doc(db, "rooms", "roomA", "messages", "message1");

Web sürümü 8

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Süratli
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
Amaç-C
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")
Java
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
piton
room_a_ref = db.collection(u'rooms').document(u'roomA')
message_ref = room_a_ref.collection(u'messages').document(u'message1')

piton

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');
Gitmek
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
PHP
$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Birlik
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#
DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
yakut
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Koleksiyonların ve belgelerin değişen düzenine dikkat edin. Koleksiyonlarınız ve belgeleriniz her zaman bu modeli izlemelidir. Bir koleksiyondaki bir koleksiyona veya bir belgedeki bir belgeye başvuramazsınız.

Alt koleksiyonlar, verileri hiyerarşik olarak yapılandırmanıza izin vererek verilere erişimi kolaylaştırır. Tüm iletileri almak için roomA , sen subcollection bir koleksiyon referans oluşturabilirsiniz messages ve onunla etkileşim başka herhangi bir tahsilat referans gibi.

Alt koleksiyonlardaki belgeler, alt koleksiyonlar da içerebilir, bu da daha fazla veri yerleştirmenize olanak tanır. Verileri 100 seviyeye kadar derinliğe yerleştirebilirsiniz.