Aapo Vainonen
Aapo Vainonen

Reputation: 453

How to perform collection group query using document ID in Cloud Firestore

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:

enter image description here

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

Answers (2)

chantey
chantey

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

Doug Stevenson
Doug Stevenson

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

Related Questions