Firebase Firestore查询:“错误:9 FAILED_PRECONDITION:该查询需要索引。您可以在这里创建它”

时间:2018-07-06 19:28:15

标签: database firebase indexing google-cloud-firestore

我有一个对名为“电子邮件”的集合的简单查询:

 const emailQuery = admin
    .firestore()
    .collection('email')
    .where('sendAt', '>=', new Date())
    .where('orderId', '==', doc.orderId)
    .where('brandId', '==', doc.brandId);

我在本文的主题中收到错误,表明我需要为此查询创建索引。我尝试为相关字段创建一对,但是由于只有一个字段是有序的,因此我不确定为什么需要它-尽管有这些索引,错误仍然存​​在:

sendAt -> Ascending, brandId -> Ascending, orderId -> Ascending

sendAt -> Descending, brandId -> Ascending, orderId -> Ascending

如您所见,我没有指定orderBy。另外,sendAt是一个日期,而其他两个是不需要排序的简单字符串。

我需要哪种索引,或者如何克服该错误?

谢谢!

1 个答案:

答案 0 :(得分:4)

来自{{3}}:

  

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

用另一种方式陈述:当您使用涉及<>的比较时,该字段上的查询中存在隐式排序。与其他条件一起使用时,需要一个索引。

您开始在问题标题中引用的错误消息应包含指向控制台的链接,该控制台将为该查询创建所需的索引。只需点击该链接并授权创建索引即可。