Referencia de definición de índice de Cloud Firestore

Cloud Firestore crea automáticamente índices para admitir los tipos de consultas más comunes, pero le permite definir índices personalizados y anulaciones de índices como se describe en las guías de Cloud Firestore .

Puede crear, modificar e implementar índices personalizados en Firebase console o mediante la CLI. Desde la CLI, edite su archivo de configuración de índice, con el nombre de archivo predeterminado firestore.indexes.json , e impleméntelo usando el comando firebase deploy .

Puede exportar índices con la CLI usando firebase firestore:indexes .

Un archivo de configuración de índice define un objeto que contiene una matriz indexes y una matriz fieldOverrides opcional. He aquí un ejemplo:

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

Implementar una configuración de índice

Implemente su configuración de índice con el comando firebase deploy . Si solo desea implementar índices para las bases de datos configuradas en su proyecto, agregue la marca --only firestore . Consulte la referencia de opciones para este comando .

Para enumerar los índices implementados, ejecute el comando firebase firestore:indexes . Agregue la marca --database=<databaseID> para enumerar los índices de una base de datos que no sea la base de datos predeterminada de su proyecto.

Si realiza ediciones en los índices usando Firebase console, asegúrese de actualizar también su archivo de índices local. Para obtener más información sobre la administración de índices, consulte las guías de Cloud Firestore .

formato JSON

Índices

El esquema para un objeto en la matriz indexes es el siguiente. Las propiedades opcionales se identifican con ? personaje.

Tenga en cuenta que los campos de documentos de Cloud Firestore solo se pueden indexar en un modo, por lo que un objeto de campo no puede contener las propiedades order y 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

Anulaciones de campo

El esquema para un objeto en la matriz fieldOverrides es el siguiente. Las propiedades opcionales se identifican con ? personaje.

Tenga en cuenta que los campos de documentos de Cloud Firestore solo se pueden indexar en un modo, por lo que un objeto de campo no puede contener las propiedades order y 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

Política TTL

Una política TTL se puede habilitar o deshabilitar usando la matriz fieldOverrides de la siguiente manera:

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

Para mantener la indexación predeterminada en el campo y habilitar una política TTL:

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

Para obtener más información sobre las políticas de tiempo de vida (TTL), consulte la documentación oficial .