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