Firestore Array Запрос более 10 элементов (нумерация страниц) - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь выбрать всех гостей вечеринки, которая хранится в массиве под названием «PhoneNumbers». Каждое приглашение добавляет этот номер телефона в массив. Если их более 10, приложение вызывает сбой, потому что это ограничение Firestore.

fileprivate func fetchGuests() {
        print("hi hi")
        guard !fetchedAllUsers, !fetchingMoreUsers else { return }
        fetchingMoreUsers = true
        tableView.reloadSections(IndexSet(integer: 1), with: .none)

        let partyUID = self.party?.partyUID ?? ""
        navigationItem.title = "\(party?.partyName ?? "") Guests"

        Firestore.firestore().collection("parties").document(partyUID).getDocument { (snap, err) in
            if let err = err {
                print(err, "fook")
            }
            guard let partyDict = snap?.data() else {return}
            let party = Party(dictionary: partyDict)

            self.phoneNumbers = party.guestPhoneNumbers as! [String]
            print(self.phoneNumbers)


        var query: Query
            if let lastFetchedNumber = self.lastFetchedNumber {
                query = Firestore.firestore().collection("users").whereField("PhoneNumber", in: self.phoneNumbers).order(by: "Full Name").start(after: [lastFetchedNumber]).limit(to: 9)

        } else {
            query = Firestore.firestore().collection("users").whereField("PhoneNumber", in: self.phoneNumbers).order(by: "Full Name").limit(to: 9)
        }

        // Change logic where gender variable is just the where field firebase thing
        query.getDocuments { (snapshot, err) in ......yadayadayada

У кого-нибудь есть идеи, как обойти правило макс. 10? Может мне стоит добавить еще один массив в коллекцию PhoneNumbers2 для гостей 9-18 и PhoneNumbers3 для 19-28?

Дайте мне знать, если у вас есть идеи! (Я не могу добавить новую коллекцию под названием гости, потому что это приложение позволяет вам приглашать людей, которых вы не аутентифицировали, и мне нужно иметь возможность запрашивать эти номера без их UID, если это имеет смысл)

1 Ответ

0 голосов
/ 11 марта 2020

Я думаю, что вам нужно избавиться от части "query =" и просто получить документы прямо в вашем операторе if-else. Это вернуло 17 документов в моем тесте. Я использовал разные имена коллекций и имена полей, но точно такую ​​же структуру.

Firestore.firestore().collection("users").whereField("PhoneNumber", in: array).order(by: "Full Name").getDocuments { (snapshot, error) in
        print(snapshot?.documents.count)
    }
...