Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
Ios 如果前一个文档未能满足我们编写的某些条件(Firestore),如何移动到集合中的下一个文档?_Ios_Swift_Firebase_Google Cloud Firestore - Fatal编程技术网

Ios 如果前一个文档未能满足我们编写的某些条件(Firestore),如何移动到集合中的下一个文档?

Ios 如果前一个文档未能满足我们编写的某些条件(Firestore),如何移动到集合中的下一个文档?,ios,swift,firebase,google-cloud-firestore,Ios,Swift,Firebase,Google Cloud Firestore,当用户按下findDeal按钮时,将从名为“deals”的集合中获取第一笔交易(文档)。一旦获取了它,我基本上会检查该交易(文档)是否已经存在于用户的交易历史记录中。如果是这样的话,那么我想转到集合中的下一笔交易(文档),并重复相同的过程。如果它不存在于用户的交易历史记录中,那么我将继续向用户显示该交易 目标:我不想向用户展示他已经看到的交易,所以如果用户已经看到文档,我只想忽略它,然后继续下一个文档 我不知道怎样才能拿到下一份文件 我所做的研究:我知道这可以通过分页来完成,但我的一生都不能把我

当用户按下findDeal按钮时,将从名为“deals”的集合中获取第一笔交易(文档)。一旦获取了它,我基本上会检查该交易(文档)是否已经存在于用户的交易历史记录中。如果是这样的话,那么我想转到集合中的下一笔交易(文档),并重复相同的过程。如果它不存在于用户的交易历史记录中,那么我将继续向用户显示该交易

目标:我不想向用户展示他已经看到的交易,所以如果用户已经看到文档,我只想忽略它,然后继续下一个文档

我不知道怎样才能拿到下一份文件

我所做的研究:我知道这可以通过分页来完成,但我的一生都不能把我的脑袋绕在它上面。在这个用例中,没有触发分页的按钮或实时侦听器,那么它是如何工作的呢

    fileprivate func findDealPressed(){
        Firestore.firestore().collection("deals").order(by: "timestamp").limit(to: 1).getDocuments { (snapshot, error) in
            if let error = error{
                print(error.localizedDescription)
                return
            } else {
                if let docs = snapshot?.documents, !docs.isEmpty{
                    for document in docs{
                        let docValues: [String:Any] = document.data()
                        let dealId = docValues["dealId"] as! String
                        let dealAlreadySeenByUser: Bool = self.checkIfDealAlreadySeenByUser(dealId: dealId)
                        if dealAlreadySeenByUser{
                            //This is where I want to proceed to the next document in the collection if the value is true i,e if the user has already seen the deal.
                        } else {
                            //Proceed to show the deal to the user
                            self.label = docValues["dealName"] as! String
                        }
                    }
                }
            }
        }
    }

    fileprivate func checkIfDealAlreadySeenByUser(dealId: String) -> Bool{
        //This is where I check and confirm it is true or false, whether the user has already seen the deal or not
        return true
    }

如果用户已经看到该交易,您将在何处存储?@iOSArchitect.com感谢您的评论。我有一个集合“users”,它又有一个子集合“deals”,其中列出了用户已经看到的所有交易。没有包含代码,因为我觉得这是非常不言自明的。如果没有大量的读取,您将很难大规模使用这种类型的查询,因为Firestore中没有SQL中所期望的“not IN”(或join)类型的查询@你好,道格。事实上,在我发布这个问题之前,我检查了你的答案。我知道只有一个数组包含选项,但没有NOT选项。至于大量的阅读,在我的案例中这不应该是一个问题,因为很少有百分比的交易最终会再次发生,但这仍然是我必须采取的必要步骤。在您的回答中,即使它有意义,但如果我甚至不知道将哪个文档设置为TRUE或FALSE,它将如何工作。如果是像“性别”这样的财产日,您的解决方案有效,但在这种情况下,它是“交易ID”,我们无法知道,如果用户已经看到交易,您将在何处存储?@iOSArchitect.com感谢您的评论。我有一个集合“users”,它又有一个子集合“deals”,其中列出了用户已经看到的所有交易。没有包含代码,因为我觉得这是非常不言自明的。如果没有大量的读取,您将很难大规模使用这种类型的查询,因为Firestore中没有SQL中所期望的“not IN”(或join)类型的查询@你好,道格。事实上,在我发布这个问题之前,我检查了你的答案。我知道只有一个数组包含选项,但没有NOT选项。至于大量的阅读,在我的案例中这不应该是一个问题,因为很少有百分比的交易最终会再次发生,但这仍然是我必须采取的必要步骤。在您的回答中,即使它有意义,但如果我甚至不知道将哪个文档设置为TRUE或FALSE,它将如何工作。如果这是一个像“性别”这样的财产日,你的解决方案是有效的,但在这种情况下,它是“交易ID”,我们不可能事先知道