从 Firestore 集合中获取最后一个文档

问题描述

我有一个 tableViewController,它从名为“paperHole”的 Firestore 集合中获取文档,我有 refreshControl,它是一个刷新 tableView 的 UIrefreshControl,但在此 refreshControl 操作中,我只想获取 Firestore 中记录的最后一个文档。我的意思是,如果集合“paperHole”有 3 个文档(A、B、C)并且该集合中记录的最后一个文档是 C,我只想获取文档 C。 我尝试使用 limit(toLast: 1) 但它对我不起作用

import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth
import UserNotifications


class OrderTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate {




@IBOutlet var order5: UITableView!

struct GlobalVariable{
    static var myString = String()
}
var db: Firestore!
var street = [String]()
var firstName = [String]()
var lastName = [String]()
var blockNumber = [String]()
var phone = [String]()
var reciept = [String]()
var houseNumber = [String]()
var price = [String]()
var amount = [String]()
var block = [String]()
var Area = [String]()
var names = [String]()
var refreshControl = UIRefreshControl()

override func viewDidLoad() {
    super.viewDidLoad()
    
    
    
    refreshControl.attributedTitle = NSAttributedString(string: "")
    refreshControl.addTarget(self,action: #selector(self.refresh(_:)),for: .valueChanged)
    order5.addSubview(refreshControl)  
    order5.separatorStyle = .none
    order5.dataSource = self
    order5.delegate = self
    
    db = Firestore.firestore()
    
    
    
    
    
    
}


@objc func refresh(_ sender: AnyObject) {
    
    loadData1Refresh()
}


func loadData1Refresh() {
    
    
    Firestore.firestore().collection("paperHole").limit(toLast: 1).getDocuments() {
        (querySnapshot,err) in
        
        if let err = err
        {
            print("Error getting documents: \(err)");
        }
        else
        {
            
            var count = 0
            for document in querySnapshot!.documents {
                count += 1
                print("\(document.documentID) => \(document.data())");
                
                self.firstName.append(document.get("firstname") as? String ?? "")
                self.lastName.append(document.get("lastname") as? String ?? "")
                self.street.append(document.get("street") as? String ?? "")
                self.blockNumber.append(document.get("blockNumber") as? String ?? "")
                self.Area.append(document.get("area") as? String ?? "")
                self.phone.append(document.get("phone") as? String ?? "")
                self.reciept.append(document.get("reciept") as? String ?? "")
                self.houseNumber.append(document.get("houseNumber") as? String ?? "")
                self.price.append(document.get("total price") as? String ?? "")
                self.amount.append(document.get("amount") as? String ?? "")
                
                
            }
            
            
        }
        
        self.order5.reloadData()
        
    }
    
}

解决方法

我相信使用 limit 是行不通的,除非您也specify order

首先,您需要为 paperHole 对象附加一个日期。根据{{​​3}}:

重要提示:与 Firebase 实时数据库中的“推送 ID”不同,Cloud Firestore 自动生成的 ID 不提供任何自动排序。如果您希望能够按创建日期对文档进行排序,则应在文档中存储时间戳作为字段。

然后您可以使用以下方法查询您的数据:

Firestore.firestore().collection("paperHole").order(by: "date",descending: true).limit(to: 1)