如何解决从 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。