13
votes

I am trying to get the documents inside an subcollection which is part of an document found with the .where function

Exemple:

  • RootColl/
    • Doc A/
      • SubColl 1
        • Doc 1
        • Doc 2
        • Doc 3
      • SubColl 2
        • Docs
    • Doc A/
      • SubColl 1
        • Doc 1
        • Doc 2
        • Doc 3
      • SubColl 2
        • Docs

I want to get all the documents under SubColl 1 from the doc with the field level == 1

I am trying to do it like:

db.collection("RootColl").where("field", "==", "1").collection("SubColl 1").get()

But by doing that i get the error

Uncaught TypeError: db.collection(...).where(...).collection is not a function

EDIT 1: By following Frank van Puffelen suggestion, i get the same error, "collection" is not a function

1

1 Answers

29
votes

A sub-collection lives under a specific document. A query as you've shared now points to a number of documents. You'll need to execute the query to determine what documents it points to, then loop over the results, and get the sub-collection for each document.

In code:

var query = db.collection("RootColl").where("field", "==", "1");
query.get().then((querySnapshot) => {
  querySnapshot.forEach((document) => {
    document.ref.collection("SubColl 1").get().then((querySnapshot) => {
      ...
    });
  });
});