Swift 从firebase中的集合检索所有文档

Swift 从firebase中的集合检索所有文档,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,数据库结构 futsal\u列表。文档(futsal\u uid)。收藏(“图书信息”)。文档(日期格式为“2019年5月9日”)。收藏(“新请求”)。文档(userUid) 在useruid中有类似于map的 time[ 6AM : timestamp 7AM : timstamp, ] 我正在使用google cloud firestore,我想从所有日期检索所有新请求,它需要是实时侦听器。我还想根据日期划分表视图部分。我只显示今天和即将到来的日期,没有显示过去的日期 问题- 当一个新的

数据库结构
futsal\u列表。文档(futsal\u uid)。收藏(“图书信息”)。文档(日期格式为“2019年5月9日”)。收藏(“新请求”)。文档(userUid)

在useruid中有类似于map的

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()
                                    }
                                }
                            })

                        }

                    }
                })
            }

        }
    }


如图所示,该结构有点奇怪,很难理解。你能截屏一段你的结构并将其包含在问题中吗?另外,当你说你想从所有日期获取所有新请求时,这意味着什么?由于当前已设置,你每个日期只能有一个新请求,因为你不能有重复的documentID(键)。因此,在book_info中,如果您有一个日期像20190508,则不能有另一个具有相同日期的文档。同样,如果您在newrequest的该日期内有一个集合,则在该日期内不能有另一个具有相同名称的集合。如图所示,结构有点奇怪,很难理解。您可以截屏显示您的结构片段吗重新设置并将其包含在问题中?另外,当您说希望从所有日期获取所有新请求时,这意味着什么?由于当前已设置,每个日期只能有一个新请求,因为您不能有重复的documentID(键)。因此,在book_info中,如果您的日期为20190508,则您不能拥有另一个具有相同日期的文档。同样,如果您在newrequest的该日期内拥有一个集合,则您在该日期内不能拥有另一个具有相同名称的集合