我正在尝试获取存储在一个名为“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 )。
发布于 2021-03-25 08:27:33
步骤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:迭代块数组并执行您的防火墙查询
chunkedArray.forEach
{ ids in
let query = db.collection("TABLE_NAME").whereField("KEY_ID" , in: ids )
//your firestore query request here
}发布于 2020-03-10 21:17:50
我认为您需要去掉其中的"query =“部分,只需在if- get语句中直接获取文档。在我的测试中,这还了17份文件。我使用不同的集合名称和字段名,但结构完全相同。
Firestore.firestore().collection("users").whereField("PhoneNumber", in: array).order(by: "Full Name").getDocuments { (snapshot, error) in
print(snapshot?.documents.count)
}发布于 2021-07-08 05:38:10
根据firebase文档,它只支持where字段中最多10个it,用于查询超过10个元素--我们需要单独查询每个文档,或者将数组拆分为10个it的块。
用于单独查询每个项目。检查下面的代码,
let usersPromise = [];
usersIds.map((id) => {
usersPromise.push(firestore.collection("users").doc(id).get());
});
Promise.all(usersPromise).then((docs) => {
const users = docs.map((doc) => doc.data());
// do your operations with users list
});https://stackoverflow.com/questions/60625055
复制相似问题