swift - Firestore Array 查询超过 10 个元素(分页)
问题描述
我正在尝试获取存储在名为“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 规则有任何想法吗?也许我应该为客人 9-18 和 PhoneNumbers3 为 19-28 的集合添加另一个数组?
如果您有任何想法,请告诉我!(我无法添加一个名为 guest 的新集合,因为此应用程序允许您邀请未经身份验证的人,并且如果有意义,我需要能够在没有 UID 的情况下查询这些号码)
解决方案
第 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)])
}
}
}
第 2 步:将内容拆分为块
let chunkedArray = ids.chunked(into: 10)
第 3 步:迭代块数组并执行您的 firestore 查询
chunkedArray.forEach
{ ids in
let query = db.collection("TABLE_NAME").whereField("KEY_ID" , in: ids )
//your firestore query request here
}
推荐阅读
- reactjs - ReactJS - 尽管使用了 preventDefault(),但父组件中的 setState 仍会提交表单
- gitlab - 覆盖包注册表中的 Gitlab CI 工件
- swift - 倒计时到 24 小时
- asp.net-core - 遥测和身份验证
- node.js - apollo-server-micro body 流读取问题(在 firebase 云功能上使用时)
- c# - C# 在 HTML 中添加换行符
- c++ - ros编译错误。错误:没有匹配函数调用 'ros::NodeHandle::subscribe(const char [16], int,
)' - mysql - 如何将逗号分隔的字符串传递给mysql查询
- kubernetes - 入口总是返回 404
- css - 带有换行内容的 Vaadin 14 Grid autoWidth