Cloud Firestore crée automatiquement des index pour prendre en charge les types de requêtes les plus courants, mais vous permet de définir des index personnalisés et des remplacements d'index comme décrit dans les guides Cloud Firestore .
Vous pouvez créer, modifier et déployer des index personnalisés dans la console Firebase ou à l'aide de la CLI. À partir de la CLI, modifiez votre fichier de configuration d'index, avec le nom de fichier par défaut firestore.indexes.json
, et déployez à l'aide de la commande firebase deploy
.
Vous pouvez exporter des index avec la CLI en utilisant firebase firestore:indexes
.
Un fichier de configuration d'index définit un objet contenant un tableau indexes
et un tableau fieldOverrides
facultatif. Voici un exemple :
{
// Required, specify compound indexes
indexes: [
{
collectionGroup: "posts",
queryScope: "COLLECTION",
fields: [
{ fieldPath: "author", arrayConfig: "CONTAINS" },
{ fieldPath: "timestamp", order: "DESCENDING" }
]
}
],
// Optional, disable indexes or enable single-field collection group indexes
fieldOverrides: [
{
collectionGroup: "posts",
fieldPath: "myBigMapField",
// We want to disable indexing on our big map field, and so empty the indexes array
indexes: []
}
]
}
Déployer une configuration d'index
Déployez votre configuration d'index avec la commande firebase deploy
. Si vous souhaitez déployer uniquement des index pour les bases de données configurées dans votre projet, ajoutez l'indicateur --only firestore
. Voir la référence des options pour cette commande .
Pour répertorier les index déployés, exécutez la commande firebase firestore:indexes
. Ajoutez l'indicateur --database=<databaseID>
pour répertorier les index d'une base de données autre que la base de données par défaut de votre projet.
Si vous apportez des modifications aux index à l'aide de la console Firebase, assurez-vous de mettre également à jour votre fichier d'index local. Pour en savoir plus sur la gestion des index, consultez les guides Cloud Firestore .
Format JSON
Index
Le schéma d'un objet du tableau indexes
est le suivant. Les propriétés facultatives sont identifiées par le ?
personnage.
Notez que les champs de document Cloud Firestore ne peuvent être indexés que dans un seul mode. Par conséquent, un objet de champ ne peut pas contenir à la fois les propriétés order
et arrayConfig
.
collectionGroup: string // Labeled "Collection ID" in the Firebase console
queryScope: string // One of "COLLECTION", "COLLECTION_GROUP"
fields: array
fieldPath: string
order?: string // One of "ASCENDING", "DESCENDING"; excludes arrayConfig property
arrayConfig?: string // If this parameter used, must be "CONTAINS"; excludes order property
Remplacements de champs
Le schéma d'un objet du tableau fieldOverrides
est le suivant. Les propriétés facultatives sont identifiées par le ?
personnage.
Notez que les champs de document Cloud Firestore ne peuvent être indexés que dans un seul mode. Par conséquent, un objet de champ ne peut pas contenir à la fois les propriétés order
et arrayConfig
.
collectionGroup: string // Labeled "Collection ID" in the Firebase console
fieldPath: string
ttl?: boolean // Set specified field to have TTL policy and be eligible for deletion
indexes: array // Use an empty array to disable indexes on this collectionGroup + fieldPath
queryScope: string // One of "COLLECTION", "COLLECTION_GROUP"
order?: string // One of "ASCENDING", "DESCENDING"; excludes arrayConfig property
arrayConfig?: string // If this parameter used, must be "CONTAINS"; excludes order property
Politique TTL
Une stratégie TTL peut être activée ou désactivée à l'aide du tableau fieldOverrides
comme suit :
// Optional, disable index single-field collection group indexes
fieldOverrides: [
{
collectionGroup: "posts",
fieldPath: "ttlField",
ttl: "true", // Explicitly enable TTL on this Field.
// Disable indexing so empty the indexes array
indexes: []
}
]
Pour conserver l'indexation par défaut dans le champ et activer une politique TTL :
{
"fieldOverrides": [
{
"collectionGroup": "yourCollectionGroup",
"fieldPath": "yourFieldPath",
"ttl": true,
"indexes": [
{ "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
{ "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
{ "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
]
}
]
}
Pour plus d'informations sur les politiques de durée de vie (TTL), consultez la documentation officielle .