swift - 为什么此查询从 Firestore 返回 nil
问题描述
我正在尝试userPosts
使用以下数据库结构和查询从我的集合组中获取三个最新文档:
-posts
-{userID}
-userPosts
-{documentID}
-postTime(Field)
询问:
postQuery = Firestore.firestore()
.collectionGroup("userPosts")
.order(by: "postTime", descending: true)
.limit(to: 3)
用于查询 Firestore 的函数:
func loadPosts() {
postQuery.getDocuments{ [weak self](querySnapshot, error) in
self!.q.async{
var postsTemp = self?.postArray
for doc in querySnapshot!.documents{
self?.documents += [doc]
let post = self!.createPost(doc)
if(!self!.postArray.contains(post)){
postsTemp?.insert(post, at: 0)
}
DispatchQueue.main.async {
self!.postArray = postsTemp!
self!.tableView.reloadData()
}
}
}
}
}
但是,当我运行它时,由于querySnapshot
nil 的事实而出现错误。我不确定为什么会发生这种情况,因为当我将降序更改为 false 时,我得到了一个结果,但顺序与我想要的相反。我觉得这与我的查询有关,但不确定我哪里出错了。
解决方案
使用两个值(和 `error)getDocuments
调用回调,其中只有一个具有 value。querySnapshot
您忽略error
并假设它querySnapshot
有一个值,这不仅会导致您得到错误,而且还会隐藏可能的原因。
我建议遵循 Firestore 文档中关于获取文档的示例中使用的模式:
db.collection("cities").whereField("capital", isEqualTo: true)
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}
通过记录error
你可以看到你的getDocuments()
电话出了什么问题。
推荐阅读
- php - Adobesign PHP API v6 不为自定义字段设置位置
- octave - 如何根据结果检查数值方法的收敛性?(八度)
- javascript - 使用 iText 从 PDF 获取 Javascript
- python-asyncio - 需要 asyncio.Future、协程或 awaitable
- javascript - 如果数字在给定范围之间,是否有一种简洁的方法来返回用于舍入数字的值?
- sql-server - SHA2_256直接比较
- python - 如何将 Azure Function 绑定到 Python 中的 blob 容器?
- php - php ftp_nlist 函数返回 504 网关超时错误
- javascript - React - 使用键名从父对象中删除子对象
- c# - React 中的 UnitTests - 方法“文本”旨在在 1 个节点上运行。找到了 0 个