Referência de definição de índice do Cloud Firestore

O Cloud Firestore cria índices automaticamente para oferecer suporte aos tipos mais comuns de consultas, mas permite definir índices personalizados e substituições de índices, conforme descrito nos guias do Cloud Firestore .

Você pode criar, modificar e implantar índices personalizados no console do Firebase ou usando a CLI. Na CLI, edite seu arquivo de configuração de índice, com o nome de arquivo padrão firestore.indexes.json e implante usando o comando firebase deploy .

Você pode exportar índices com a CLI usando firebase firestore:indexes .

Um arquivo de configuração de índice define um objeto contendo uma matriz indexes e uma matriz opcional fieldOverrides . Aqui está um exemplo:

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

Implantar uma configuração de índice

Implante a configuração do seu índice com o comando firebase deploy . Se você deseja implantar índices apenas para os bancos de dados configurados em seu projeto, adicione o sinalizador --only firestore . Consulte a referência de opções para este comando .

Para listar os índices implantados, execute o comando firebase firestore:indexes . Adicione o sinalizador --database=<databaseID> para listar os índices de um banco de dados diferente do banco de dados padrão do seu projeto.

Se você fizer edições nos índices usando o console do Firebase, atualize também o arquivo de índices locais. Para saber mais sobre como gerenciar índices, consulte os guias do Cloud Firestore .

Formato JSON

Índices

O esquema para um objeto na matriz indexes é o seguinte. As propriedades opcionais são identificadas com o ? personagem.

Observe que os campos de documentos do Cloud Firestore só podem ser indexados em um modo, portanto, um objeto de campo não pode conter as propriedades order e 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

Substituições de campo

O esquema para um objeto na matriz fieldOverrides é o seguinte. As propriedades opcionais são identificadas com o ? personagem.

Observe que os campos de documentos do Cloud Firestore só podem ser indexados em um modo, portanto, um objeto de campo não pode conter as propriedades order e 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 de TTL

Uma política TTL pode ser habilitada ou desabilitada usando o array fieldOverrides da seguinte maneira:

  // 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 manter a indexação padrão no campo e ativar uma 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 obter mais informações sobre políticas de tempo de vida (TTL), revise a documentação oficial .