Извлечение всех документов из коллекции в пожарной базе - PullRequest
1 голос
/ 09 мая 2019

Структура базы данных 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 и хочу получить новый запрос со всех дат иэто должен быть слушатель в реальном времени.Я также хочу разделить раздел представления таблицы в соответствии с датой.И я показываю только сегодняшние и предстоящие даты, а не прошлые.

проблема - при получении нового запроса таблица добавляет в таблицу один и тот же запрос несколько раз, и когда я возвращаюсьи прийти к представлению, то данные показаны в порядке.

это то, что я пытался

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

                        }

                    }
                })
            }

        }
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...