Modello dati

Firestore è un database NoSQL orientato ai documenti. A differenza di un database SQL, non ci sono tabelle o righe. I dati vengono invece archiviati in documenti, che sono organizzate in raccolte.

Ogni documento contiene un insieme di coppie chiave-valore. Firestore è e ottimizzato per l'archiviazione di grandi raccolte di piccoli documenti.

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

Le raccolte e i documenti vengono creati implicitamente in Firestore. È sufficiente assegnare i dati a un documento all'interno di una raccolta. Se la raccolta se il documento non esiste, Firestore lo crea.

Documenti

In Firestore, l'unità di archiviazione è il documento. Un documento è un un record leggero contenente campi mappati a valori. Ogni documento è identificati da un nome.

Un documento che rappresenta l'utente alovelace potrebbe avere il seguente aspetto:

  • alovelace

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

Gli oggetti complessi e nidificati in un documento sono chiamati mappe. Ad esempio, potresti struttura il nome dell'utente nell'esempio precedente con una mappa, come questa:

  • alovelace

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

Potresti notare che i documenti sembrano molto simili a JSON. In sostanza, 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 e creare record JSON leggeri.

Raccolte

I documenti risiedono in raccolte, che sono semplicemente container di documenti. Per Ad esempio, potresti avere una raccolta users che contiene i vari utenti, rappresentati da un documento:

  • utenti

    • alovelace

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

    • in tour

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

Firestore è senza schema, quindi hai piena libertà su ciò che campi inseriti in ogni documento e i tipi di dati archiviati al loro interno. I documenti all'interno della stessa raccolta possono contenere tutti campi o archivi diversi diversi tipi di dati in questi campi. Tuttavia, è una buona idea utilizzare gli stessi campi e tipi di dati in più documenti, in modo da poter eseguire query documenti più facilmente.

Una raccolta contiene documenti e nient'altro. Non può contenere direttamente i dati non elaborati campi con valori e non può contenere altre raccolte. Vedi la sezione Dati per una spiegazione su come strutturare i dati più complessi in Firestore.)

I nomi dei documenti all'interno di una raccolta sono univoci. Puoi fornire i tuoi come gli ID utente, oppure puoi lasciare che Firestore crei ID casuali automaticamente.

Non è necessario "creare" o "elimina" raccolte. Dopo aver creato la prima documento in una raccolta, la raccolta esiste. Se elimini tutti i documenti in una raccolta, non esiste più.

Riferimenti

Ogni documento in Firestore è identificato in modo univoco dalla sua località all'interno del database. L'esempio precedente mostrava un documento alovelace all'interno di la raccolta users. Per fare riferimento a questa località nel tuo codice, puoi creare un riferimento.

Versione web 9

import { doc } from "firebase/firestore";

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

Versione web 8

var alovelaceDocumentRef = db.collection('users').doc('alovelace');
Swift
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
let alovelaceDocumentRef = db.collection("users").document("alovelace")
Objective-C
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
FIRDocumentReference *alovelaceDocumentRef =
    [[self.db collectionWithPath:@"users"] documentWithPath:@"alovelace"];
Kotlin+KTX
Android
val alovelaceDocumentRef = db.collection("users").document("alovelace")
Java
Android
DocumentReference alovelaceDocumentRef = db.collection("users").document("alovelace");

Darte

final alovelaceDocumentRef = db.collection("users").doc("alovelace");
Java
// 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
(Async)
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');
Vai

import (
	"cloud.google.com/go/firestore"
)

func createDocReference(client *firestore.Client) {

	alovelaceRef := client.Collection("users").Doc("alovelace")

	_ = alovelaceRef
}
PHP

PHP

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

$document = $db->collection('samples/php/users')->document('alovelace');
Unity
DocumentReference documentRef = db.Collection("users").Document("alovelace");
C#

C#

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

DocumentReference documentRef = db.Collection("users").Document("alovelace");
Ruby
document_ref = firestore.col("users").doc("alovelace")

Un riferimento è un oggetto leggero che punta a una posizione nel tuo per configurare un database. Puoi creare un riferimento indipendentemente dal fatto che esista o meno dei dati al suo interno la creazione di un riferimento non esegue alcuna operazione di rete.

Puoi anche creare riferimenti alle raccolte:

Versione web 9

import { collection } from "firebase/firestore";

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

Versione web 8

var usersCollectionRef = db.collection('users');
Swift
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
let usersCollectionRef = db.collection("users")
Objective-C
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
FIRCollectionReference *usersCollectionRef = [self.db collectionWithPath:@"users"];
Kotlin+KTX
Android
val usersCollectionRef = db.collection("users")
Java
Android
CollectionReference usersCollectionRef = db.collection("users");

Darte

final usersCollectionRef = db.collection("users");
Java
// Reference to the collection "users"
CollectionReference collection = db.collection("users");
Python
users_ref = db.collection("users")
Python
(Async)
users_ref = db.collection("users")
C++
CollectionReference users_collection_reference = db->Collection("users");
Node.js
const usersCollectionRef = db.collection('users');
Vai

import (
	"cloud.google.com/go/firestore"
)

func createCollectionReference(client *firestore.Client) {
	usersRef := client.Collection("users")

	_ = usersRef
}
PHP

PHP

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

$collection = $db->collection('samples/php/users');
Unity
CollectionReference collectionRef = db.Collection("users");
C#

C#

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

CollectionReference collectionRef = db.Collection("users");
Ruby
collection_ref = firestore.col "users"

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

Versione web 9

import { doc } from "firebase/firestore"; 

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

Versione web 8

var alovelaceDocumentRef = db.doc('users/alovelace');
Swift
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
let aLovelaceDocumentReference = db.document("users/alovelace")
Objective-C
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
FIRDocumentReference *aLovelaceDocumentReference =
    [self.db documentWithPath:@"users/alovelace"];
Kotlin+KTX
Android
val alovelaceDocumentRef = db.document("users/alovelace")
Java
Android
DocumentReference alovelaceDocumentRef = db.document("users/alovelace");

Darte

final aLovelaceDocRef = db.doc("users/alovelace");
Java
// 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
(Async)
a_lovelace_ref = db.document("users/alovelace")
C++
DocumentReference alovelace_document = db->Document("users/alovelace");
Node.js
const alovelaceDocumentRef = db.doc('users/alovelace');
Vai

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

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

$document = $db->document('users/alovelace');
Unity
DocumentReference documentRef = db.Document("users/alovelace");
C#

C#

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

DocumentReference documentRef = db.Document("users/alovelace");
Ruby
document_path_ref = firestore.doc "users/alovelace"

Dati gerarchici

Per comprendere come funzionano le strutture di dati gerarchiche in Firestore, Prendi in considerazione un'app di chat di esempio con messaggi e stanze virtuali.

Puoi creare una raccolta denominata rooms per archiviare diverse stanze virtuali:

  • stanze

    • roomA

      name : "my chat room"

    • roomB

      ...

Ora che hai le stanze virtuali, decidi come archiviare i tuoi messaggi. Potresti non nel documento della chat room. Documenti in Firestore dovrebbe essere leggero e una chat room potrebbe contenere un gran numero di messaggi. Tuttavia, puoi creare raccolte aggiuntive all'interno del documento della stanza virtuale, come sottoraccolte.

Raccolte secondarie

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

Puoi creare una sottoraccolta denominata messages per ogni documento della stanza in la tua raccolta rooms:

  • stanze

    • roomA

      name : "my chat room"

      • messaggi

        • message1

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

        • message2

          ...

    • roomB

      ...

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

Versione web 9

import { doc } from "firebase/firestore"; 

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

Versione web 8

var messageRef = db.collection('rooms').doc('roomA')
                .collection('messages').doc('message1');
Swift
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
let messageRef = db
  .collection("rooms").document("roomA")
  .collection("messages").document("message1")
Objective-C
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
FIRDocumentReference *messageRef =
    [[[[self.db collectionWithPath:@"rooms"] documentWithPath:@"roomA"]
    collectionWithPath:@"messages"] documentWithPath:@"message1"];
Kotlin+KTX
Android
val messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1")
Java
Android
DocumentReference messageRef = db
        .collection("rooms").document("roomA")
        .collection("messages").document("message1");

Darte

final messageRef = db
    .collection("rooms")
    .doc("roomA")
    .collection("messages")
    .doc("message1");
Java
// 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
(Async)
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');
Vai

import (
	"cloud.google.com/go/firestore"
)

func createSubcollectionReference(client *firestore.Client) {
	messageRef := client.Collection("rooms").Doc("roomA").
		Collection("messages").Doc("message1")

	_ = messageRef
}
PHP

PHP

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

$document = $db
    ->collection('rooms')
    ->document('roomA')
    ->collection('messages')
    ->document('message1');
Unity
DocumentReference documentRef = db
	.Collection("Rooms").Document("RoomA")
	.Collection("Messages").Document("Message1");
C#

C#

Per eseguire l'autenticazione su Firestore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

DocumentReference documentRef = db
    .Collection("Rooms").Document("RoomA")
    .Collection("Messages").Document("Message1");
Ruby
message_ref = firestore.col("rooms").doc("roomA").col("messages").doc("message1")

Nota il pattern alternato di raccolte e documenti. Le tue raccolte e documenti devono sempre seguire questo schema. Non puoi fare riferimento a una raccolta in una raccolta o un documento in un documento.

Le sottoraccolte consentono di strutturare i dati in modo gerarchico, semplificando access. Per ricevere tutti i messaggi in roomA, puoi creare un riferimento per la raccolta alla sottoraccolta messages e interagisci con quest'ultima come faresti con riferimento alla raccolta.

Anche i documenti delle raccolte secondarie possono contenere sottoraccolte, consentendoti nidificare ulteriormente i dati. Puoi nidificare i dati fino a 100 livelli.