Firestore query subcollections

Nelson.b.austin picture Nelson.b.austin · Oct 4, 2017 · Viewed 71.8k times · Source

I thought I read that you can query subcollections with the new Firebase Firestore, but I don't see any examples. For example I have my Firestore setup in the following way:

  • Dances [collection]
    • danceName
    • Songs [collection]
      • songName

How would I be able to query "Find all dances where songName == 'X'"

Answer

Gil Gilbert picture Gil Gilbert · Oct 4, 2017

Update 2019-05-07

Today we released collection group queries, and these allow you to query across subcollections.

So, for example in the web SDK:

db.collectionGroup('Songs')
  .where('songName', '==', 'X')
  .get()

This would match documents in any collection where the last part of the collection path is 'Songs'.

Your original question was about finding dances where songName == 'X', and this still isn't possible directly, however, for each Song that matched you can load its parent.

Original answer

This is a feature which does not yet exist. It's called a "collection group query" and would allow you query all songs regardless of which dance contained them. This is something we intend to support but don't have a concrete timeline on when it's coming.

The alternative structure at this point is to make songs a top-level collection and make which dance the song is a part of a property of the song.