【问题标题】:Firestore index errorFirestore 索引错误
【发布时间】:2018-04-18 22:30:07
【问题描述】:

我在使用 Angular 2 从 Firestore 查询数据时遇到了一些问题。

谁能帮我检查一下并告诉我哪里做错了?

我的错误:

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)

这是我的代码:

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;
    });
  });
}

【问题讨论】:

  • 我需要你的帮助!

标签: angular firebase google-cloud-firestore


【解决方案1】:

发生此错误是因为默认情况下,Firestore 不需要为仅使用相等子句的查询附加索引,因此您的情况并非如此。

要使您的查询正常工作,您只需单击错误消息的链接并在 Firebase 控制台中为您的查询创建一个新索引。

要了解有关 Firestore 索引如何工作的更多信息,您可以阅读 documentation.

【讨论】:

    【解决方案2】:

    也可能发生此错误,因为您查询的字段之一在扫描的文档中不存在

    【讨论】:

      【解决方案3】:

      点击提供的链接。如果它没有将您带到正确的页面,如果您收到此错误:

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

      退出当前用户,并以您的 Firebase 用户身份登录。

      您将获得为您的查询建议的索引。

      包含特定查询的查询需要复合索引 值和范围或顺序。

      当您运行这些查询时,它们的性能会很差并且无法很好地扩展。

      每次使用不同的字段、组合范围、等于或按运算符排序时,您都必须创建一个新索引。如果您只使用 whereEqualTo 运算符,则不需要。

      根据您的数据大小,创建索引可能需要一段时间。

      【讨论】:

        【解决方案4】:

        来自文档:

        管理索引

        Cloud Firestore 通过要求索引来确保查询性能 每个查询。最基本的查询所需的索引是 自动为您创建。在您使用和测试您的应用程序时,Cloud Firestore 会生成错误消息,帮助您创建额外的 索引您的应用程序需要。本页介绍如何管理您的 单字段索引和复合索引。

        通过错误信息创建缺失索引

        如果您尝试使用不映射的范围子句进行复合查询 到现有索引,您会收到错误。错误信息包括 在 Firebase 控制台中创建缺失索引的直接链接。

        Read more there.

        如果您在 VS 代码或任何 IDE 中,只需按 ctrl + 左键单击即可创建缺失索引。如果那没有将您带到创建索引对话框。复制粘贴网址到浏览器。

        【讨论】:

          【解决方案5】:

          如果您使用 Firebase 托管,您可以将以下内容添加到您的 firestore.indexes.json 文件中:

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

          当您部署 Firebase 时,它​​会自动构建这些索引。

          您也可以使用以下命令自行部署索引:

          firebase deploy --only firestore:indexes

          【讨论】:

          • 这里,如何为单字段索引添加豁免?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-26
          • 2010-09-16
          • 2015-07-19
          相关资源
          最近更新 更多