Crea i dati iniziali ed esegui operazioni collettive sui dati

In Firebase Data Connect, le operazioni collettive sui dati vengono eseguite utilizzando mutazioni. Anche se i progetti Data Connect archiviano i dati in PostgreSQL, non puoi caricare collettivamente i dati utilizzando istruzioni SQL o strumenti SQL: Il servizio Data Connect e i relativi schemi devono rimanere sincronizzati con il tuo e operare direttamente in PostgreSQL interromperebbe questa sincronizzazione.

Ecco perché Data Connect fornisce mutazioni _insertMany, _upsertMany e _deleteMany standard per il seeding dei dati e la gestione collettiva dei dati.

Quando esegui la prototipazione di app ed esegui flussi CI/CD, queste mutazioni possono essere chiamate in un ambiente di sviluppo locale utilizzando l'estensione VS Code, l'emulatore Data Connect e, facoltativamente, un'istanza di database locale.

Dati origine in istanze locali e di produzione

Nella Guida introduttiva, configuri un'app per Aggiungere un singolo record a una singola tabella utilizzando una mutazione di inserimento ad hoc.

Per essere utilizzabile, l'app di recensioni di film ha bisogno di dati su film, recensioni e utenti per la prototipazione di query e mutazioni che utilizzano unioni e altre operazioni su più tabelle con dati realistici. Puoi espandere lo schema ed eseguire il seed per configurare un database.

L'ambiente di prototipazione richiede codice per eseguire il seeding dei dati. Questa guida fornisce alcuni esempi che illustrano:

  • Utilizzo di _insertMany e _upsertMany su singole tabelle
  • Utilizzo di _insertMany in tabelle correlate

Aggiorna lo schema dell'app per le recensioni dei film

Puoi usare le mutazioni _insertMany e _upsertMany per aggiornare singolarmente tabelle di database una alla volta o aggiorna più tabelle correlate per join relazioni. Uno schema dell'app per le recensioni dei film ampliato che aiuta a illustrare questi aspetti sono riportati di seguito casi d'uso ed esempi. Espande schema.gql oltre inizia con il tipo Movie per includere i tipi Actor e MovieActor, in modo da poter prototipare query più complesse.

# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
  id: UUID!
  imageUrl: String! 
  name: String! @col(name: "name", dataType: "varchar(30)")
}

# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
  # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
  # In this case, @ref(fields: "movieId", references: "id") is implied
  movie: Movie!
  # movieId: UUID! <- this is created by the implied @ref
  actor: Actor!
  # actorId: UUID! <- this is created by the implied @ref
  role: String! # "main" or "supporting"
}

Scrivere le mutazioni in dati a stato zero di seed

Durante la prototipazione, quando le query e le mutazioni devono essere testate rispetto a un di valori discreti, puoi completare i dati con più record. Per Ad esempio, potresti voler aggiungere più record di filmati con diversi tipi di generi e valutazioni per testare confronti e filtri.

Dati di origine nelle tabelle Movie e Actor

A seconda della fase di prototipazione, puoi utilizzare la stessa tecnica introdotta nella guida Inizia a utilizzare per inserire uno o due record: in altre parole, puoi utilizzare le lenti di codice nell'estensione VS Code per creare mutazioni _insert, codificare i dati e eseguire queste mutazioni in VS Code.

Alla fine, ha più senso aggiungere molti record in una tabella utilizzando un Operazione _insertMany. Nell'esempio di app di recensioni di film, viene inserito un insieme iniziale di dati in Movie e Actor.

Per eseguire le seguenti mutazioni, utilizza l'estensione Firebase di VS Code e, nella visualizzazione dell'editor di file appropriata, fai clic sui pulsanti CodeLens Esegui (produzione) o Esegui (locale), a seconda che tu stia creando una prototipazione con il tuo servizio di produzione o con un database locale.

# insertMany for Movie
# 2 records shown
mutation {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])
}
# insertMany for Actor
# 2 records shown
mutation {
  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
   ])
}

Inserisci i dati iniziali nella tabella di join MovieActor

Per testare le query e le mutazioni utilizzando unioni e altre operazioni complesse, puoi aggiungere più record alla tabella MovieActor.

Qui, quando aggiorni più tabelle in questo tipo di relazione, puoi aggiungi l'istruzione @transaction per assicurarti che l'aggiornamento venga completato correttamente.

mutation @transaction {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])

  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
  ])
}

Scrivi una mutazione per reimpostare i dati iniziali

Durante la creazione di prototipi ed l'esecuzione di CI/CD, può essere utile reimpostare i dati su uno stato zero per eseguire una nuova serie di test su un nuovo set di dati.

A tale scopo, se il codice del prototipo non aggiunge record alle tabelle, utilizza la mutazione _upsertMany fornita da Data Connect.

Nell'esempio seguente, movie_upsertMany viene chiamato con i valori iniziali per aggiornare i record dei filmati allo stato originale.

mutation {
  # Execute an upsertMany operation to update the Movie table
  movie_upsertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
   …
}

Quali sono i passaggi successivi?