web-dev-qa-db-fra.com

Erreur d'index Firestore

Je rencontre un problème lorsque j'utilise angular 2 pour interroger les données de Firestore.

Quelqu'un pourrait-il m'aider en le vérifiant et en me disant où j'ai mal agi?

Mon erreur:

ERROR Error: The query requires an index. You can create it here: https://console.firebase.google.com/project/admin-e8a7b/database/firestore/indexes?create_index=EgR0ZW1wGgcKA3VpZBACGg0KCXN0YXJ0ZWRBdBADGgwKCF9fbmFtZV9fEAM
at new FirestoreError (vendor.bundle.js:19925)

Voici mon code:

getTemp(uid): Observable<any> {
let temps = [];
var today = new Date();
return this.afs.collection<Temps>('temp', ref => ref.where('uid', '==', uid).orderBy('startedAt', 'desc')).snapshotChanges()
  .map(actions => {
    return actions.map(action => {
      const data = action.payload.doc.data() as Temps;
      console.log(data.temp);
      return data.temp;
    });
  });
}
8
Tri Nguyen

Cette erreur se produit car, par défaut, Firestore ne nécessite pas d'index supplémentaires pour les requêtes qui utilisent uniquement des clauses d'égalité , ce n'est donc pas votre cas.

Pour que votre requête fonctionne, il vous suffit de cliquer sur le lien du message d'erreur et de créer un nouvel index pour votre requête dans la console Firebase.

Pour en savoir plus sur le fonctionnement des index Firestore, vous pouvez lire la documentation.

Cliquez sur le lien fourni. Si cela ne vous amène pas à la bonne page, si vous obtenez cette erreur:

The project xxx either does not exist, or user doesn't have permission

déconnectez l'utilisateur actuel et connectez-vous en tant qu'utilisateur Firebase.

Vous obtiendrez l'index suggéré pour votre requête.

Les index composites sont requis pour les requêtes qui incluent des valeurs spécifiques et une plage ou un ordre.

Lorsque vous exécutez ces requêtes, leurs performances sont médiocres et leur mise à l'échelle est mauvaise.

Chaque fois que vous modifiez votre requête avec différents champs, en combinant la plage, égale ou triée par les opérateurs, vous devrez créer un nouvel index. Si vous utilisez uniquement les opérateurs whereEqualTo, vous n'en avez pas besoin.

La création de l'index peut prendre un certain temps en fonction de la taille de vos données.

2
live-love

Du doc:

Gérer les index

Cloud Firestore garantit les performances des requêtes en exigeant un index pour chaque requête. Les index requis pour les requêtes les plus élémentaires sont automatiquement créés pour vous. Lorsque vous utilisez et testez votre application, Cloud Firestore génère des messages d'erreur qui vous aident à créer des index supplémentaires dont votre application a besoin. Cette page décrit comment gérer vos index à champ unique et composites.

Créer un index manquant via un message d'erreur

Si vous tentez une requête composée avec une clause de plage qui ne correspond pas à un index existant, vous recevez une erreur. Le message d'erreur inclut un lien direct pour créer l'index manquant dans la console Firebase.

En savoir plus .

SI vous êtes en code VS ou n'importe quel IDE, appuyez simplement sur ctrl + clic gauche, il vous amènera à créer un index manquant. Si cela ne vous a pas amené à la boîte de dialogue de création d'index. Copiez collez l'url dans le navigateur.

0
Blasanka

Si vous utilisez l'hébergement Firebase, vous pouvez ajouter ce qui suit à votre firestore.indexes.json fichier:

{
  "collectionGroup": "temp",
  "queryScope": "COLLECTION",
  "fields": [
    {
      "fieldPath": "uid",
      "order": "ASCENDING"
    },
    {
      "fieldPath": "startedAt",
      "order": "DESCENDING"
    }
  ]
}

Lorsque vous déployez Firebase, il crée automatiquement ces index.

Vous pouvez également déployer les index par eux-mêmes avec cette commande:

firebase deploy --only firestore:indexes

0
ForrestLyman

Cette erreur peut également se produire car l'un des champs que vous avez interrogé n'existe pas dans un document numérisé

0
Nth.gol