Cloud Firestore erstellt automatisch Indizes, um die gängigsten Abfragetypen zu unterstützen. Sie können jedoch benutzerdefinierte Indizes und Indexüberschreibungen definieren, wie in den Cloud Firestore-Anleitungen beschrieben.
Sie können benutzerdefinierte Indizes in der Firebase-Konsole oder über die CLI erstellen, ändern und bereitstellen. Bearbeiten Sie über die CLI Ihre Indexkonfigurationsdatei mit dem Standarddateinamen firestore.indexes.json
und stellen Sie sie mit dem firebase deploy
Befehl bereit.
Sie können Indizes mit der CLI mithilfe firebase firestore:indexes
exportieren.
Eine Indexkonfigurationsdatei definiert ein Objekt, das ein indexes
Array und ein optionales fieldOverrides
Array enthält. Hier ist ein Beispiel:
{
// 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: []
}
]
}
Stellen Sie eine Indexkonfiguration bereit
Stellen Sie Ihre Indexkonfiguration mit dem firebase deploy
-Befehl bereit. Wenn Sie nur Indizes für die in Ihrem Projekt konfigurierten Datenbanken bereitstellen möchten, fügen Sie das Flag --only firestore
hinzu. Weitere Informationen finden Sie in der Optionsreferenz für diesen Befehl .
Um bereitgestellte Indizes aufzulisten, führen Sie den firebase firestore:indexes
aus. Fügen Sie das Flag --database=<databaseID>
hinzu, um Indizes für eine andere Datenbank als die Standarddatenbank Ihres Projekts aufzulisten.
Wenn Sie mit der Firebase-Konsole Änderungen an den Indizes vornehmen, stellen Sie sicher, dass Sie auch Ihre lokale Indexdatei aktualisieren. Weitere Informationen zum Verwalten von Indizes finden Sie in den Cloud Firestore-Anleitungen .
JSON-Format
Indizes
Das Schema für ein Objekt im indexes
Array lautet wie folgt. Optionale Eigenschaften werden mit dem ?
gekennzeichnet. Charakter.
Beachten Sie, dass Cloud Firestore-Dokumentfelder nur in einem Modus indiziert werden können. Daher kann ein Feldobjekt nicht sowohl die Eigenschaften order
als auch arrayConfig
enthalten.
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
FieldOverrides
Das Schema für ein Objekt im fieldOverrides
Array lautet wie folgt. Optionale Eigenschaften werden mit dem ?
gekennzeichnet. Charakter.
Beachten Sie, dass Cloud Firestore-Dokumentfelder nur in einem Modus indiziert werden können. Daher kann ein Feldobjekt nicht sowohl die Eigenschaften order
als auch arrayConfig
enthalten.
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
TTL-Richtlinie
Eine TTL-Richtlinie kann mithilfe des fieldOverrides
Arrays wie folgt aktiviert oder deaktiviert werden:
// 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: []
}
]
So behalten Sie die Standardindizierung im Feld bei und aktivieren eine TTL-Richtlinie:
{
"fieldOverrides": [
{
"collectionGroup": "yourCollectionGroup",
"fieldPath": "yourFieldPath",
"ttl": true,
"indexes": [
{ "order": "ASCENDING", "queryScope": "COLLECTION_GROUP" },
{ "order": "DESCENDING", "queryScope": "COLLECTION_GROUP" },
{ "arrayConfig": "CONTAINS", "queryScope": "COLLECTION_GROUP" }
]
}
]
}
Weitere Informationen zu Time-to-Live-Richtlinien (TTL) finden Sie in der offiziellen Dokumentation .