Reputation: 453
So few day ago I moved my apps posts to cloud firestore from realtime database because of the more flexable querying that firestore apparently has. I have been modifying my code to work with firestore as the new database. Now I ran into a problem. How can I retrieve every document within "Posts" collection that has "Likes" collection that contains a specifically named document? I don't know if that makes sense so here's an image showcasing the problem:
I had a working query for firebase realtime database but can't figure out how to do it with firestore. Is it possible or do I have to change the structure of my database? If I do have to change the structure, what would be the most convenient way of getting the same result?
Upvotes: 39
Views: 14794
Reputation: 5827
Often at the point the id
is known, so is the path
. Store that instead and when you need to you can get the document directly without the need for a query.
Upvotes: 0
Reputation: 317467
This is currently not possible with collection group queries. You might be tempted to put a filter on the query for FieldPath.documentId() == 'your-doucment-id'
, but that just isn't supported. FieldPath.documentId()
is actually a token that refers to to fully unique document id, which includes the entire path of the document.
The workaround is to store the document ID as a field in the document, and filter on the contents of that field instead. So, if the document had a field called id
with the ID of the document, you could query for collectionGroup("Likes").whereEquals('id', 'your-document-id')
.
Upvotes: 39