无法对基于 Firestore 过滤器的查询进行分页

用户12937508

我正在尝试在 swift iOS 中实现分页,它使用基于类别的过滤器和 Firestore 作为后端。但这只是在向下滚动时按照第一个查询加载到 5 个文档,并且它没有加载更多文档,因为它应该在分页中发生。

此方法中使用的查询基于 Category 类型 Filter,Filter 的类型是获取所有文档或基于所选类别。当我使用过滤查询时,根据以下示例中的第二个查询仅加载两个文档

在 stopObserving() 函数中,它应该删除侦听器。但是当查询被过滤,然后当过滤被删除时,它不会加载回未过滤的查询。

我只是无法分块加载数据。如果需要更多详细信息,请告诉我

问题的新补充

使用下面的代码,当应用过滤器时,查询中有whereField()子句,当过滤器被删除时,同样的子句也会从查询中删除,并且没有whereField()子句在查询分页中成功发生,否则没有与whereField 的分页查询中的()子句

我还希望使用whereField()子句进行分页,因为它发生在没有whereField()子句的情况下

代码

fileprivate func observeQuery() {

  fetchingMore = true
  guard var query = query else { return }
  stopObserving()

  if posts.isEmpty {
    query = query.limit(to: 5)

    print("First 6 rides loaded")
  } else {
    query = query.start(afterDocument: lastDocumentSnapshot).limit(to: 2)
  }

  listener = query.addSnapshotListener { [unowned self] (snapshot, error) in
    guard let snapshot = snapshot else {
      print("Error fetching snapshot results: \(error!)")
      return
    }
    let models = snapshot.documents.map { (document) -> Post in
      if let model = Post(dictionary: document.data()) {
        return model
      }
    }
    self.posts = models
    DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
      self.tableView.reloadData()
      self.fetchingMore = false
    })

    self.lastDocumentSnapshot = snapshot.documents.last

    self.documents = snapshot.documents

    if self.documents.count > 0 {
      self.tableView.backgroundView = nil
    } else {
      self.tableView.backgroundView = self.backgroundView
    }

  }
}

whereField() 查询的代码,它更新 BaseQuery,然后在 observeQuery() 中调用该查询以获取文档并对它们进行分页

extension HomeViewController: FiltersViewControllerDelegate {

  func query(withCategory category: String?) -> Query {
    var filtered = baseQuery()

    if category == nil {
      stackViewHeightConstraint.constant = 0
      activeFiltersStackView.isHidden = true
    } else {
      stackViewHeightConstraint.constant = 44
      activeFiltersStackView.isHidden = false
    }

    // Advanced queries

    if let category = category, !category.isEmpty {
      filtered = filtered.whereField("category", isEqualTo: category)
    }

    return filtered
  }

  func controller(_ controller: FiltersViewController,
                  didSelectCategory category: String?
                  ) {
    let filtered = query(withCategory: category)

    if let category = category, !category.isEmpty {
      categoryFilterLabel.text = category
      categoryFilterLabel.isHidden = false
    } else {
      categoryFilterLabel.isHidden = true
    }

    self.query = filtered
    observeQuery()
  }

}

基本查询

fileprivate func baseQuery() -> Query {
  return Firestore.firestore().collection("collections").order(by: "timestamp", descending: true)
}
阿约达特

在这种情况下的问题是您试图按属性排序并where在不同的属性上执行带有“等于”条件子句。

如果要执行此类操作,则必须为这两个属性创建复合索引

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

您可以基于查询创建意图过滤器吗?

无法编译内联过滤器:<带有查询的Jsonpath>

在不同字段上使用过滤器的字段上的Firestore查询顺序

基于多个过滤器的过滤器阵列

jersey / jackson-基于查询参数的过滤器属性

基于2个值的COUNTA查询/过滤器

无法过滤Firestore中的数据

如何基于单击的for循环按钮创建查询过滤器

Flutter + Firestore:过滤器列表

基于列表属性的领域Swift过滤器查询

基于Firestore请求中变量的颤振位置过滤器

Django,如何基于查询集设置过滤器?

无法从过滤器查询集结果访问模型字段

汇总基于行的过滤器以进行多种操作

Firestore查询多个过滤器以在本机中检索集合

jQuery:Datatables.net基于不同的过滤器更改分页类型

使用laravel过滤器基于类常量进行过滤

基于过滤器重新查询linq查询

基于集合的 firestore 查询过滤器

基于 url 中的 kwarg 的 django 过滤器查询集

使用按位运算符的 Cloud Firestore 查询/过滤器

mysql 查询过滤器 LIKE 无法正常工作

Firebase Firestore REST 请求 - 查询和过滤器

如何从用户模型过滤器的数据创建基于公司的FireStore数据库?

Firestore Golang 在事务中使用过滤器运行查询

具有分页的基于过滤器类的视图 ListView

MySQL WHERE 过滤器基于 SELECT 中的子查询

在过滤器数组上使用扩展运算符来创建 Firestore 查询

基于firestore中的多个字段进行查询