【问题标题】:Why does this query return nil from Firestore为什么此查询从 Firestore 返回 nil
【发布时间】:2021-04-29 18:02:30
【问题描述】:

我正在尝试使用以下数据库结构和查询从我的集合组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 时,我得到了一个结果,但顺序与我想要的相反。我感觉这与我的查询有关,但不确定我哪里出错了。

【问题讨论】:

  • AFIK,使用collectionGroup,orderby 可能需要Indexing,您是否有任何错误说要创建索引?
  • 不,我已经创建了索引。

标签: swift firebase google-cloud-firestore


【解决方案1】:

getDocuments 回调使用两个值(querySnapshot 和 `error)调用,其中只有一个值

您忽略了error 并假设querySnapshot 有一个值,这不仅会导致您得到错误,而且还隐藏了可能的原因。

我建议遵循 getting documents 上的 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() 呼叫出了什么问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多