从Firebase中的集合中检索所有文档

时间:2019-05-09 10:51:16

标签: swift firebase google-cloud-firestore

数据库结构 futsal_list.document(futsal_uid).collection("book_info").document(date in format "May 9, 2019".collection("newrequest").document(userUid)

在useruid中有类似

的地图
time[ 
6AM : timestamp
7AM : timstamp,
]

我正在使用Google Cloud Firestore,我想从所有日期检索所有新请求,它需要是实时侦听器。我也想根据日期划分表格视图部分。而且我只显示今天和即将到来的日期,而没有过去的日期。

问题- 当一个新请求到达表时,在表中多次添加单个请求,当我返回视图时,显示的数据就很好了。

这就是我尝试过的

func loadAllRequestFromFirebasee() {
        db.collection("futsal_list").document(currentUser!.uid).collection("book_info").addSnapshotListener { (querySnapshot, error) in
            guard let snapshot = querySnapshot else {
                print("Error fetching snapshots: \(error!)")
                return
            }

            self.newRequestArray.removeAll()
            self.sectionHeader.removeAll()
            var validDates = [String] ()
            for document in snapshot.documents {
                let bookedDate = document.documentID
                if !self.isPastDate(date: bookedDate) {
                    validDates.append(bookedDate)
                }
            }

            for (bookedDateIndex, bookedDate) in validDates.enumerated() {
                self.db.collection("futsal_list").document(self.currentUser!.uid).collection("book_info").document(bookedDate).collection("newrequest").getDocuments(completion: { (uidSnapshots, error) in

                    guard let uidSnapshot = uidSnapshots else {
                        print("Error fetching snapshots: \(error!)")
                        return
                    }

                    let userUids = uidSnapshot.documents
                    if userUids.count > 0 {
                        self.newRequestArray.append([])
                        self.sectionHeader.append(bookedDate)

                        for document in userUids {
                            print("\(document.documentID) => \(document.data())")
                            let dataDescription = document.data()
                            let userUid = document.documentID
                            let bookedTimes = dataDescription["time"] as! [String : Any]

                            self.db.collection("users_list").document(userUid).getDocument(completion: { (document, error) in
                                if let document = document, document.exists {
                                    let data = document.data()
                                    let userName = data!["user_full_name"] as? String ?? ""
                                    //                            let futsalAddress = data!["futsal_address"] as? String ?? ""
                                    let userPhone = data!["user_phone_number"] as? String ?? ""
                                    let userProfilePic = data!["user_profile_image"] as? String ?? ""


                                    for time in bookedTimes.keys {
                                        let newRequest = NewRequest(userUid: userUid, userName: userName, bookDate: bookedDate, bookTime: time, userPhoneNumber: userPhone, userProfilePicture: userProfilePic)
                                        self.newRequestArray[bookedDateIndex].append(newRequest)
                                        self.newBookRequestTableView.reloadData()
                                    }
                                }
                            })

                        }

                    }
                })
            }

        }
    }

0 个答案:

没有答案