Home > front end >  firestore fetch subcollection
firestore fetch subcollection

Time:02-23

I'm trying to fetch subcollection of my users document with code below

    func readData(){
        let userId = Auth.auth().currentUser?.uid
        self.db.collection("users/\(userId)/saved").getDocuments { (snapshot, err) in
            if let err = err {
                print("err")
            }
                if let userId != nil {
                    for document in snapshot!.documents {
                       let docId = document.documentID
                       let cty = document.get("city") as! String
                       let ccode = document.get("code") as! String
                       let countr = document.get("country") as! String
                       print(cty, ccode, countr,docId)
                }
        }
        }

but my code doesn't print anything, I don't understand the problem, documents exsist, see picture below

enter image description here

CodePudding user response:

You're using illegal syntax with the userId check in the snapshot return but the logic flow is the bigger problem. I would recommend you check if the user is signed in before grabbing the subcollection and checking if there is a viable snapshot instead of checking the state of authentication.

func readData() {
    guard let userId = Auth.auth().currentUser?.uid else {
        return
    }
    db.collection("users/\(userId)/saved").getDocuments { (snapshot, error) in
        guard let snapshot = snapshot else {
            if let error = error {
                print(error)
            }
            return
        }
        for doc in snapshot.documents {
            guard let city = doc.get("city") as? String,
                  let code = doc.get("code") as? String,
                  let country = doc.get("country") as? String else {
                      continue // continue document loop
                  }
            let docId = doc.documentID
            print(city, code, country, docId)
        }
    }
}
  • Related