微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么我的查询不限制从 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 举报,一经查实,本站将立刻删除。