为什么我的查询不限制从 firestore 中提取的文档数量?

问题描述

我正在尝试获取所有用户的帖子,最新的优先。

我已经为我的 Firestore 创建了一个查询,如下所示:

const oldArray = [[ 'Veículo','Entrega\nSem/Com oco\nQtde','Entrega\nSem/Com oco\nKg','Com oco Kg\n%' ],[ 'BTT3B43','0 / 29','0 / 1.712','100\n100\n100\n ' ],[ 'EKV8922','0 / 22','0 / 1.170','100\n100\n100\n ' ]];

const newArray = oldArray.map(
  lines => lines.map(childLines => childLines.replace(/\r?\n|\r/g,'|'))
);

console.log(newArray);

我的数据库如下所示:

postQuery = Firestore.firestore()
            .collectionGroup("userPosts")
            .order(by: "postTime",descending: false)
            .limit(to: 2)

// This call to load posts does not seem to load anything
// when I step through this with the debugger I see that it does not
// change the value of postArray which should be changed in loadPosts()
loadPosts()

我如何加载数据

posts(Collection)
   ---{userID}(Document)
         ---userPosts(Collection)
              {postID}(Document)
                  ---postTime(Field)
                  ---imageURL(Field)

我如何对数据进行分页

//queries Firestore and loads into postArray
    func loadPosts() {
        postQuery.getDocuments{ [weak self](querySnapshot,error) in
            self!.q.async{
                guard let snapshot = querySnapshot else {
                    print("No Posts")
                    return
                }
                var poststemp = self?.postArray
                for doc in snapshot.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()
                    }
                }
            }
        }
    }

然后我将文档字段加载到表视图的单元格中,其方法定义如下:

func paginate(){
        postQuery = postQuery.start(afterDocument: documents.last!)
        self.loadPosts()
    }

但是,当我第一次加载我的应用程序时,我会看到它加载了我数据库中的所有文档,而不会将其限制为两个,并且在滚动时分页。这使我的应用程序非常缓慢并且经常耗尽内存。为什么不受限制?

更新

override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int { if postArray.count == 0{ return 1 }else{ return postArray.count } } override func tableView(_ tableView: UITableView,willdisplay cell: UITableViewCell,forRowAt indexPath: IndexPath) { // Trigger pagination when scrolled to last cell if (indexPath.row == postArray.count - 1) { paginate() } } override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell { var post: PostStruct let cell = tableView.dequeueReusableCell(withIdentifier: K.cellIdentifier,for: indexPath) as! PostCell cell.delegate = self cell.imageView.image.sd_setimage(url: post.imageURL)// just an example } 是帖子的创建时间,是格式为“2021-01-19 01:45:33 +0000”的字符串。最奇怪的是,它似乎首先加载最旧的,所以当我将降序更改为 true 时,它​​不会加载任何帖子。我已通读 Firebase 文档,但找不到任何导致此行为的原因。

更新 2

我想我最紧迫的问题是为什么当降序设置为 false 时我会返回帖子,但当它设置为 true 时我不会。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)