Dans Firebase Data Connect, les opérations de données groupées sont effectuées à l'aide de mutations. Même si vos projets Data Connect stockent des données dans PostgreSQL, vous ne pouvez pas charger des données de manière groupée à l'aide d'instructions SQL ni d'outils SQL. Votre service Data Connect et ses schémas doivent rester synchronisés avec votre base de données, et l'exécution directement dans PostgreSQL interromprait cette synchronisation.
C'est pourquoi Data Connect fournit des mutations _insertMany
, _upsertMany
et _deleteMany
standards pour le semis de données et la gestion des données groupées.
Lorsque vous effectuez des prototypes d'applications et exécutez des flux CI/CD, ces mutations peuvent être appelées dans un environnement de développement local à l'aide de l'extension VS Code, de l'émulateur Data Connect et (facultatif) d'une instance de base de données locale.
Insérer des données de référence dans les instances locales et de production
Dans le guide de démarrage, vous avez configuré une application pour ajouter un seul enregistrement à un seul tableau à l'aide d'une mutation d'insertion ad hoc.
Pour être utilisable, l'application d'avis sur les films a besoin de données sur les films, les avis et les utilisateurs pour prototyper des requêtes et des mutations qui utilisent des jointures et d'autres opérations sur plusieurs tables avec des données réalistes. Vous pouvez développer votre schéma et ensemencer votre base de données.
Votre environnement de prototypage a besoin de code pour effectuer le semis de données. Ce guide fournit des exemples illustrant les points suivants:
- Utilisation de
_insertMany
et_upsertMany
sur des tables individuelles - Utilisation de
_insertMany
sur des tables associées
Mettre à jour le schéma de l'application de critiques de films
Vous pouvez utiliser des mutations _insertMany
et _upsertMany
pour mettre à jour des tables de base de données individuelles une par une ou pour mettre à jour plusieurs tables liées par des relations de jointure. Vous trouverez ci-dessous un schéma d'application d'avis sur les films développé qui permet d'illustrer ces cas d'utilisation et exemples. Il étend schema.gql
au-delà du type Movie
de départ pour inclure les types Actor
et MovieActor
, afin que nous puissions prototyper des requêtes plus complexes.
# 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"
}
Écrire des mutations pour fournir des données de l'état zéro
Lors du prototypage, lorsque vos requêtes et mutations doivent être testées sur une plage de valeurs distinctes, vous pouvez renseigner les données avec plusieurs enregistrements. Par exemple, vous pouvez ajouter plusieurs enregistrements de films avec différents types de genres et de classifications pour tester les comparaisons et le filtrage.
Insérer des données de départ dans les tables Movie
et Actor
Selon l'étape de prototypage à laquelle vous vous trouvez, vous pouvez utiliser la même technique présentée dans le guide de démarrage pour insérer un ou deux enregistrements. Autrement dit, vous pouvez utiliser les loupes de code dans l'extension VS Code pour créer des mutations _insert
, des données codées en dur et exécuter ces mutations dans VS Code.
Il est finalement plus logique d'ajouter de nombreux enregistrements dans une table à l'aide d'une opération _insertMany
. Dans l'exemple d'application d'avis sur les films, cela insère un ensemble initial de données dans Movie
et Actor
.
Pour exécuter les mutations suivantes à l'aide de l'extension Firebase pour VS Code, dans la vue de l'éditeur de fichiers appropriée, cliquez sur les boutons CodeLens Run (Production) (Exécuter (Production)) ou Run (Local) (Exécuter (Local)), selon que vous effectuez un prototypage avec votre service de production ou une base de données 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"
}
])
}
Insérer des données dans la table de jointure MovieActor
Pour tester des requêtes et des mutations à l'aide de jointures et d'autres opérations complexes, vous pouvez ajouter plusieurs enregistrements à la table MovieActor
.
Ici, lorsque vous mettez à jour plusieurs tables dans ce type de relation, vous pouvez ajouter la directive @transaction
pour vous assurer que la mise à jour se termine correctement.
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"
}
])
}
Écrire une mutation pour réinitialiser les données sources
Lors du prototypage et de l'exécution de la CI/CD, il peut être utile de réinitialiser les données à un état nul pour exécuter une nouvelle série de tests sur un nouvel ensemble de données.
Pour ce faire, si le code de votre prototype n'ajoute pas d'enregistrements à vos tables, utilisez la mutation _upsertMany
fournie par Data Connect.
Dans l'exemple suivant, movie_upsertMany
est appelé avec les valeurs initiales pour rétablir l'état d'origine des enregistrements de films.
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",
}
…
}
Étape suivante
- Découvrez comment intégrer le Admin SDK à vos projets Data Connect.