Swift Firestore数组查询超过10个元素(分页)
我正在尝试获取一个名为“PhoneNumber”的数组中存储的聚会的所有来宾。每个邀请都会将该人员的电话号码添加到该数组中。如果超过10个邀请,应用程序将崩溃,因为这是Firestore的限制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
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