在 iOS 上使用 Swift 从 Firebase Firestore 获取随机文档时出现问题

Issue when fetching random documents from Firebase Firestore with Swift on iOS

我想在用户每次打开我的应用程序时从 Firestore 中随机获取文档。

我正确地实现了该功能并且它根据需要随机获取文档。

我的问题是,例如,当随机文档是我的 Firestore 数据库中的最后一个文档时。它将停止加载新文档,因为它之后没有更多文档。因为我还实现了当用户到达页面底部时加载下一个文档。

我该如何解决这个问题?

请帮忙解决这个问题?我想加载随机文档,而不是在它到达最终文档之前停止加载文档。

这是我的代码:

    func loadData(){
        
        let randomShops = db.collection("Shops");
        key = randomShops.document().documentID
          
        db.collection("Shops").whereField("__name__", isGreaterThanOrEqualTo: self.key!).order(by: "__name__", descending: true).limit(to: 8).getDocuments(){
            querySnapshot, error in
            if let error = error {
                print(error.localizedDescription)
            }else {
                self.lastDoc = querySnapshot?.documents[(querySnapshot?.documents.endIndex)! - 1]
                self.shops = querySnapshot!.documents.compactMap({addShop(dictionary: [=12=].data())})
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }
          
        }
 }

然后我会在用户向下滚动时获取新文档。但是如果出现的文档是我的 Firestore 数据库中的最后一个文档,即使不是所有文档都已加载,它也不会加载更多文档。

    func getNextShops() {

        db.collection("Shops").order(by: "__name__").start(afterDocument: lastDoc!).limit(to: 8).getDocuments(){ docs, err in
            self.docsCount = docs?.count
            if  self.docsCount == 0{
                self.tableView.stopLoading()
                return
            }else{
            if let err = err {
                print(err.localizedDescription)
            }else{
                    docs?.documents.forEach{ data in
                       
                            self.shops.append(addShop(dictionary: data.data())!)
                            DispatchQueue.main.async {
                                self.tableView.reloadData()
                                
                            }
                    }
                self.lastDoc = docs?.documents[(docs?.documents.endIndex)! - 1]
                self.lastDocID = self.lastDoc?.documentID
        
                }
            }
        }
}

如果问题是没有获得足够的随机文档,只需再次 运行 请求并附加结果即可满足相同的条件。 Firestore 的大多数随机解决方案仅适用于 1 个随机浮点数,我建议在这种情况下添加第二个随机浮点数。