Firebase实时数据库:如何使用查询获取子集数据?

问题描述 投票:0回答:1

这是我的数据结构,使用时间戳作为ID:

{
    "posts": {
        "1703921218409": {
            "category": "All",
            "content": "1",
            "title": "1"
        },
        "1703921229327": {
            "category": "All",
            "content": "2",
            "title": "2"
        },
        "1703921232777": {
            "category": "All",
            "content": "3",
            "title": "3"
        },
        "1703921236094": {
            "category": "All",
            "content": "4",
            "title": "4"
        },
        "1703921239468": {
            "category": "All",
            "content": "5",
            "title": "5"
        },
        "1703921243055": {
            "category": "All",
            "content": "6",
            "title": "6"
        },
        "1703921246316": {
            "category": "All",
            "content": "7",
            "title": "7"
        }
    }

我想用reactjs建立一个论坛并在一页中显示5个帖子,所以它的工作原理如下: 第1页(第1-5篇文章),第2页(第6-10篇文章),...等

问题是我不知道如何直接获取帖子 6-10,我所能做的就是从 firebase 获取帖子 1-10 并在客户端过滤帖子 6-10。

      const snapshot = await get( query(ref(db, 'posts'), limitToLast(10)) )
      // do a iteration to get needed data (post 6-10)

但是如果用户转到第 1000 页,我需要获取帖子 1-5000 并丢弃帖子 1-4995 只是为了最后 5 个帖子,这似乎效率低下。

那么有没有办法直接获取子集数据,而不是获取整个数据并过滤掉呢?

reactjs firebase google-cloud-platform google-cloud-firestore firebase-realtime-database
1个回答
0
投票

我想在reactjs中建立一个论坛并在一个页面中显示5个帖子,所以它的工作方式如下:page1(帖子1-5),page2(帖子6-10),...等

您正在寻找的称为分页。这意味着您必须以较小的块加载数据。说到实时数据库,据我所知,官方还没有给出如何实现的例子。这个主题之前已经介绍过,所以请检查以下方法:

但是,如果您在某个时间点考虑尝试使用Cloud Firestore,我可以告诉您,有一种非常简单的方法来实现分页,即使用查询游标。也许你应该尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.