Riferimento alla definizione dell'indice Cloud Firestore

Cloud Firestore crea automaticamente indici per supportare i tipi di query più comuni, ma consente di definire indici personalizzati e sostituzioni di indici come descritto nelle guide Cloud Firestore .

Puoi creare, modificare e distribuire indici personalizzati nella console Firebase o utilizzando la CLI. Dalla CLI, modifica il file di configurazione dell'indice, con il nome file predefinito firestore.indexes.json , ed esegui la distribuzione utilizzando il comando firebase deploy .

Puoi esportare gli indici con la CLI utilizzando firebase firestore:indexes .

Un file di configurazione dell'indice definisce un oggetto contenente un array indexes e un array fieldOverrides facoltativo. Ecco un esempio:

{
  // 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: []
    }
  ]
}

Distribuire una configurazione dell'indice

Distribuisci la configurazione dell'indice con il comando firebase deploy . Se desideri distribuire solo gli indici per i database configurati nel tuo progetto, aggiungi il flag --only firestore . Vedere il riferimento alle opzioni per questo comando .

Per elencare gli indici distribuiti, esegui il comando firebase firestore:indexes . Aggiungi il flag --database=<databaseID> per elencare gli indici di un database diverso da quello predefinito del tuo progetto.

Se apporti modifiche agli indici utilizzando la console Firebase, assicurati di aggiornare anche il file degli indici locali. Per ulteriori informazioni sulla gestione degli indici, consulta le guide Cloud Firestore .

Formato JSON

Indici

Lo schema per un oggetto nell'array degli indexes è il seguente. Le proprietà facoltative sono identificate con il simbolo ? carattere.

Tieni presente che i campi dei documenti Cloud Firestore possono essere indicizzati solo in una modalità, pertanto un oggetto campo non può contenere sia la proprietà order che quella 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

FieldOverride

Lo schema per un oggetto nell'array fieldOverrides è il seguente. Le proprietà facoltative sono identificate con il simbolo ? carattere.

Tieni presente che i campi dei documenti Cloud Firestore possono essere indicizzati solo in una modalità, pertanto un oggetto campo non può contenere sia la proprietà order che quella 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

Politica TTL

Un criterio TTL può essere abilitato o disabilitato utilizzando l'array fieldOverrides come segue:

  // 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: []
    }
  ]

Per mantenere l'indicizzazione predefinita nel campo e abilitare una politica TTL:

{
  "fieldOverrides": [
    {
      "collectionGroup": "yourCollectionGroup",
      "fieldPath": "yourFieldPath",
      "ttl": true,
      "indexes": [
        { "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
        { "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
        { "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
      ]
    }
  ]
}

Per ulteriori informazioni sulle politiche time-to-live (TTL), consultare la documentazione ufficiale .