Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Firestore数组查询超过10个元素(分页)_Swift_Firebase_Google Cloud Firestore_Pagination - Fatal编程技术网

Swift Firestore数组查询超过10个元素(分页)

Swift Firestore数组查询超过10个元素(分页),swift,firebase,google-cloud-firestore,pagination,Swift,Firebase,Google Cloud Firestore,Pagination,我正在尝试获取一个名为“PhoneNumber”的数组中存储的聚会的所有来宾。每个邀请都会将该人员的电话号码添加到该数组中。如果超过10个邀请,应用程序将崩溃,因为这是Firestore的限制 fileprivate func fetchGuests() { print("hi hi") guard !fetchedAllUsers, !fetchingMoreUsers else { return } fetchingMoreUsers = tr

我正在尝试获取一个名为“PhoneNumber”的数组中存储的聚会的所有来宾。每个邀请都会将该人员的电话号码添加到该数组中。如果超过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规则吗? 也许我应该为9-18的客人添加另一个数组,称为PhoneNumbers2,为19-28的客人添加PhoneNumbers3


如果你有任何想法,请告诉我!(我无法添加一个名为guests的新集合,因为此应用程序允许您邀请未经身份验证的人,如果有意义,我需要能够在没有UID的情况下查询这些号码)

我认为您需要去掉其中的“query=”部分,直接在if-else语句中获取文档。这在我的测试中返回了17个文档。我使用了不同的集合名和字段名,但结构完全相同


我认为您需要去掉其中的“query=”部分,直接在if-else语句中获取文档。这在我的测试中返回了17个文档。我使用了不同的集合名和字段名,但结构完全相同


步骤1:添加数组扩展以获取数组块

extension Array {
func chunked(into size: Int) -> [[Element]] {
    return stride(from: 0, to: count, by: size).map {
        Array(self[$0 ..< Swift.min($0 + size, count)])
    }
}
}
 chunkedArray.forEach
 { ids in

   let query = db.collection("TABLE_NAME").whereField("KEY_ID" , in: ids )
 //your firestore query request here 
 }
步骤3:迭代区块数组并执行firestore查询

extension Array {
func chunked(into size: Int) -> [[Element]] {
    return stride(from: 0, to: count, by: size).map {
        Array(self[$0 ..< Swift.min($0 + size, count)])
    }
}
}
 chunkedArray.forEach
 { ids in

   let query = db.collection("TABLE_NAME").whereField("KEY_ID" , in: ids )
 //your firestore query request here 
 }

步骤1:添加数组扩展以获取数组块

extension Array {
func chunked(into size: Int) -> [[Element]] {
    return stride(from: 0, to: count, by: size).map {
        Array(self[$0 ..< Swift.min($0 + size, count)])
    }
}
}
 chunkedArray.forEach
 { ids in

   let query = db.collection("TABLE_NAME").whereField("KEY_ID" , in: ids )
 //your firestore query request here 
 }
步骤3:迭代区块数组并执行firestore查询

extension Array {
func chunked(into size: Int) -> [[Element]] {
    return stride(from: 0, to: count, by: size).map {
        Array(self[$0 ..< Swift.min($0 + size, count)])
    }
}
}
 chunkedArray.forEach
 { ids in

   let query = db.collection("TABLE_NAME").whereField("KEY_ID" , in: ids )
 //your firestore query request here 
 }

错误信息是什么?我认为这里的方法是问题所在,我很好奇您指的Firestore限制是什么?一个查询可以返回1到无限多的文档;唯一的限制是您的代码告诉它只返回一个特定的数字
。limit(to:9)
,这不会导致崩溃。你能更清楚地解释一下代码的用途吗?是因为你有一个电话号码列表,并且你想根据该列表获得匹配的客人信息吗?我很抱歉。firebase的限制是,当您使用whereField(“Field”,in:[array])Ah时,您不能拥有一个包含超过10个元素的数组,但这根本不是必需的。再一次——问题是;您是否有电话号码列表并希望读取这些用户数据?如果是这样,则数据的结构不正确,无法实现这一点。例如,您可以在每个节点中都有一个名为invested_to:party_1的字段,因此当用户被邀请参加某个聚会时,可以使用party_1更新其文档invested_to field。然后查询所有被邀请参加party_1的用户,就完成了。如果你能澄清这个问题,或者给我们一个你的结构片段,我们可能会有更多的帮助。回复评论时使用@JayWhat's错误消息是什么?我认为这里的方法就是问题所在,我很好奇您指的Firestore限制是什么?一个查询可以返回1到无限多的文档;唯一的限制是您的代码告诉它只返回一个特定的数字
。limit(to:9)
,这不会导致崩溃。你能更清楚地解释一下代码的用途吗?是因为你有一个电话号码列表,并且你想根据该列表获得匹配的客人信息吗?我很抱歉。firebase的限制是,当您使用whereField(“Field”,in:[array])Ah时,您不能拥有一个包含超过10个元素的数组,但这根本不是必需的。再一次——问题是;您是否有电话号码列表并希望读取这些用户数据?如果是这样,则数据的结构不正确,无法实现这一点。例如,您可以在每个节点中都有一个名为invested_to:party_1的字段,因此当用户被邀请参加某个聚会时,可以使用party_1更新其文档invested_to field。然后查询所有被邀请参加party_1的用户,就完成了。如果你能澄清这个问题,或者给我们一个你的结构片段,我们可能会有更多的帮助。回复评论时请使用@Jay