I have what I thought was a simple query on a collection called 'email':
const emailQuery = admin
.firestore()
.collection('email')
.where('sendAt', '>=', new Date())
.where('orderId', '==', doc.orderId)
.where('brandId', '==', doc.brandId);
I'm receiving the error in the subject of this post, indicating that I need to create an index for this query. I've tried creating a couple for the relevant fields, but I'm unsure of why it's needed since only one field is ordered--and the error remains despite these indexes:
sendAt -> Ascending, brandId -> Ascending, orderId -> Ascending
sendAt -> Descending, brandId -> Ascending, orderId -> Ascending
I'm not specifying an orderBy
as you can see. Also, sendAt
is a date, while the other two are simple strings that don't need to be ordered.
What kind index do I need, or how do I get past this error?
Thanks!
From the documentation:
If you attempt a compound query with a range clause that doesn't map to an existing index, you receive an error. The error message includes a direct link to create the missing index in the Firebase console.
To state it another way: when you use a comparison that involves <
or >
, there is an implicit ordering in the query on that field. When used in combination with conditions on other fields, an index is required for the particular collection ID.
The error message that you started to quote in the title of your question should contain a link to the console that will create the required index for that query. Just follow that link and authorize the creation of the index.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With