Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Modello di dati Cloud Firestore

Cloud Firestore è un database NoSQL orientato ai documenti. A differenza di un database SQL, non ci sono tabelle o righe. Invece, archivi i dati nei documenti , che sono organizzati in raccolte .

Ogni documento contiene una serie di coppie chiave-valore. Cloud Firestore è ottimizzato per l'archiviazione di grandi raccolte di piccoli documenti.

Tutti i documenti devono essere archiviati in raccolte. I documenti possono contenere sottoraccolte e oggetti nidificati, entrambi possono includere campi primitivi come stringhe o oggetti complessi come elenchi.

Le raccolte e i documenti vengono creati implicitamente in Cloud Firestore. Assegna semplicemente i dati a un documento all'interno di una raccolta. Se la raccolta o il documento non esiste, Cloud Firestore lo crea.

Documenti

In Cloud Firestore, l'unità di archiviazione è il documento. Un documento è un record leggero che contiene campi, mappati ai valori. Ogni documento è identificato da un nome.

Un documento che rappresenta un utente alovelace potrebbe essere simile a questo:

  • alovelace

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

Gli oggetti complessi e nidificati in un documento sono chiamati mappe. Ad esempio, puoi strutturare il nome dell'utente dell'esempio sopra con una mappa, in questo modo:

  • alovelace

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

Potresti notare che i documenti assomigliano molto a JSON. In effetti, fondamentalmente lo sono. Esistono alcune differenze (ad esempio, i documenti supportano tipi di dati aggiuntivi e hanno dimensioni limitate a 1 MB), ma in generale puoi trattare i documenti come record JSON leggeri.

Collezioni

I documenti vivono in raccolte, che sono semplicemente contenitori di documenti. Ad esempio, potresti avere una raccolta di users per contenere i tuoi vari utenti, ciascuno rappresentato da un documento:

  • utenti

    • alovelace

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

    • aturing

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

Cloud Firestore è privo di schemi, quindi hai la massima libertà su quali campi inserire in ogni documento e quali tipi di dati archiviare in quei campi. I documenti all'interno della stessa raccolta possono contenere tutti campi diversi o memorizzare diversi tipi di dati in quei campi. Tuttavia, è una buona idea utilizzare gli stessi campi e tipi di dati su più documenti, in modo da poter interrogare i documenti più facilmente.

Una raccolta contiene documenti e nient'altro. Non può contenere direttamente campi non elaborati con valori e non può contenere altre raccolte. (Consulta Dati gerarchici per una spiegazione di come strutturare dati più complessi in Cloud Firestore.)

I nomi dei documenti all'interno di una raccolta sono univoci. Puoi fornire le tue chiavi, come gli ID utente, oppure puoi consentire a Cloud Firestore di creare automaticamente ID casuali per te.

Non è necessario "creare" o "eliminare" raccolte. Dopo aver creato il primo documento in una raccolta, la raccolta esiste. Se elimini tutti i documenti di una raccolta, questa non esiste più.

Riferimenti

Ogni documento in Cloud Firestore è identificato in modo univoco dalla sua posizione all'interno del database. L'esempio precedente mostrava un documento alovelace all'interno degli users della raccolta. Per fare riferimento a questa posizione nel codice, è possibile creare un riferimento ad essa.

ragnatela
var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Obiettivo-C
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];

Giava

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

Kotlin + KTX

val alovelaceDocumentRef = db.collection("users").document("alovelace")
Giava
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.collection("users").document("alovelace");
Pitone
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');
Partire
alovelaceRef := client.Collection("users").Doc("alovelace")
PHP
$document = $db->collection('users')->document('lovelace');
Unità
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C #
DocumentReference documentRef = db.Collection("users").Document("alovelace");
Rubino
document_ref = firestore.col("users").doc("alovelace")

Un riferimento è un oggetto leggero che punta solo a una posizione nel database. È possibile creare un riferimento indipendentemente dalla presenza o meno dei dati e la creazione di un riferimento non esegue alcuna operazione di rete.

Puoi anche creare riferimenti a raccolte :

ragnatela
var usersCollectionRef = db.collection('users');
Swift
let usersCollectionRef = db.collection("users")
Obiettivo-C
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];

Giava

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

Kotlin + KTX

val usersCollectionRef = db.collection("users")
Giava
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Pitone
users_ref = db.collection(u'users')
C ++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Partire
usersRef := client.Collection("users")
PHP
$collection = $db->collection('users');
Unità
CollectionReference collectionRef = db.Collection("users");
C #
CollectionReference collectionRef = db.Collection("users");
Rubino
collection_ref = firestore.col "users"

Per comodità, puoi anche creare riferimenti specificando il percorso di un documento o di una raccolta come una stringa, con i componenti del percorso separati da una barra ( / ). Ad esempio, per creare un riferimento al documento alovelace :

ragnatela
var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
let aLovelaceDocumentReference = db.document("users/alovelace")
Obiettivo-C
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];

Giava

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

Kotlin + KTX

val alovelaceDocumentRef = db.document("users/alovelace")
Giava
// Reference to a document with id "alovelace" in the collection "users"
DocumentReference document = db.document("users/alovelace");
Pitone
a_lovelace_ref = db.document(u'users/alovelace')
C ++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Partire
alovelaceRef := client.Doc("users/alovelace")
PHP
$document = $db->document('users/lovelace');
Unità
DocumentReference documentRef = db.Document("users/alovelace");
C #
DocumentReference documentRef = db.Document("users/alovelace");
Rubino
document_path_ref = firestore.doc "users/alovelace"

Dati gerarchici

Per capire come funzionano le strutture di dati gerarchiche in Cloud Firestore, considera un'app di chat di esempio con messaggi e chat room.

È possibile creare una raccolta denominata rooms per memorizzare diverse chat room:

  • stanze

    • A.

      name : "my chat room"

    • B.

      ...

Ora che hai chat room, decidi come memorizzare i tuoi messaggi. Potresti non volerli memorizzare nel documento della chat room. I documenti in Cloud Firestore dovrebbero essere leggeri e una chat room potrebbe contenere un numero elevato di messaggi. Tuttavia, puoi creare raccolte aggiuntive all'interno del documento della chat room, come sottoraccolte.

Sottoraccolte

Il modo migliore per archiviare i messaggi in questo scenario è utilizzare le sottoraccolte. Una sottoraccolta è una raccolta associata a un documento specifico.

È possibile creare una sottoraccolta chiamata messages per ogni documento di sala nella raccolta di rooms :

  • stanze

    • A.

      name : "my chat room"

      • messaggi

        • 1

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

        • 2

          ...

    • B.

      ...

In questo esempio, creerai un riferimento a un messaggio nella sottoraccolta con il codice seguente:

ragnatela
var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Swift
let messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
Obiettivo-C
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];

Giava

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

Kotlin + KTX

val messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1")
Giava
// Reference to a document in subcollection "messages"
DocumentReference document =
    db.collection("rooms").document("roomA").collection("messages").document("message1");
Pitone
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');
Partire
messageRef := client.Collection("rooms").Doc("roomA").
	Collection("messages").Doc("message1")
PHP
$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unità
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C #
DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Rubino
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Notare lo schema alternato di raccolte e documenti. Le tue raccolte e i tuoi documenti devono sempre seguire questo schema. Non è possibile fare riferimento a una raccolta in una raccolta oa un documento in un documento.

Le sottoraccolte consentono di strutturare i dati in modo gerarchico, semplificando l'accesso ai dati. Per ottenere tutti i messaggi in roomA , è possibile creare un riferimento alla raccolta ai messages della sottoraccolta e interagire con esso come si farebbe con qualsiasi altro riferimento alla raccolta.

I documenti nelle sottoraccolte possono contenere anche sottoraccolte, consentendo di nidificare ulteriormente i dati. Puoi annidare i dati fino a 100 livelli di profondità.