Firestore索引错误

时间:2017-11-06 17:19:02

标签: angular firebase google-cloud-firestore

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

5 个答案:

答案 0 :(得分:11)

发生此错误是因为默认情况下,Firestore不需要为仅使用相等条款的查询添加其他索引,因此情况并非如此。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

单击提供的链接。如果没有将您带到正确的页面,则出现此错误:

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

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

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

  

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

运行这些查询时,它们的性能会很差,扩展性也不会很好。

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

创建索引可能需要一段时间,具体取决于您的数据大小。

答案 3 :(得分:0)

来自文档:

  

管理索引

     

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

     

通过错误消息创建丢失的索引

     

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

Read more there

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

答案 4 :(得分:0)

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

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

部署Firebase时,它将自动建立这些索引。

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

firebase deploy --only firestore:indexes