Javascript 带分页的Firebase过滤器

Javascript 带分页的Firebase过滤器,javascript,firebase,firebase-realtime-database,angularfire2,Javascript,Firebase,Firebase Realtime Database,Angularfire2,我正在用Firebase+Angular做一个开源Yelp 我的数据库: { "reviews" : { "-L0f3Bdjk9aVFtVZYteC" : { "comment" : "my comment", "ownerID" : "Kug2pR1z3LMcZbusqfyNPCqlyHI2", "ownerName" : "MyName", "rating" : 2,

我正在用Firebase+Angular做一个开源Yelp

我的数据库:

    {
      "reviews" : {
        "-L0f3Bdjk9aVFtVZYteC" : {
          "comment" : "my comment",
          "ownerID" : "Kug2pR1z3LMcZbusqfyNPCqlyHI2",
          "ownerName" : "MyName",
          "rating" : 2,
          "storeID" : "-L0e8Ua03XFG9k0zPmz-"
        },
        "-L0f7eUGqenqAPC1liYj" : {
          "comment" : "me second comment",
          "ownerID" : "Kug2pR1z3LMcZbusqfyNPCqlyHI2",
          "ownerName" : "MyName",
          "rating" : 3,
          "storeID" : "-L0e8Ua03XFG9k0zPmz-"
        },    
      },
      "stores" : {
        "-L0e8Ua03XFG9k0zPmz-" : {      
          "description" : "My good Store",      
          "name" : "GoodStore",
          "ownerID" : "39UApyo0HIXmKPrTOi8D0nWLi6n2",      
          "tags" : [ "good", "health", "cheap" ],
        }
      },
      "users" : {
        "39UApyo0HIXmKPrTOi8D0nWLi6n2" : {
          "name" : "First User"
        },
        "Kug2pR1z3LMcZbusqfyNPCqlyHI2" : {
          "name" : "MyName",
          "reviews" : {
            "-L0f3Bdjk9aVFtVZYteC" : true,
            "-L0f7eUGqenqAPC1liYj" : true
          }
        }
      }
    }
我使用下面的代码获取所有商店的评论(使用AngularFire2)

现在,我想做一个服务器端的回顾分页,但我想我不能用这个数据库结构来做。我说得对吗?尝试:

    getReviews(storeID: string){
        return this.db.list('/reviews', ref => { 
            return ref.orderByChild('storeID').equalTo(storeID).limitToLast(10) //How to make pagination without retrive all data?
        });
    }

我想我可以把所有评论放在商店里,但是(I)我不想在有人要求商店时一次检索所有评论,(ii)我的评论有一个用户名,所以我想很容易更改它(这就是为什么我有一个非规范化的表)

对于第二页,你需要知道两件事:

  • 要筛选的存储ID
  • 您要开始的审查的关键点
  • 你已经有了商店ID,所以这很简单。作为开始的关键,我们使用上一页最后一项的关键,然后只要求额外的一项。最后,您需要使用
    start()
    (可能还需要使用
    endAt()
    )来执行以下操作:

    return this.db.list('/reviews', ref => { 
        return ref.orderByChild('storeID')
                  .startAt(storeID, lastKeyOnPreviousPage)
                  .limitToLast(11)
    });
    
    return this.db.list('/reviews', ref => { 
        return ref.orderByChild('storeID')
                  .startAt(storeID, lastKeyOnPreviousPage)
                  .limitToLast(11)
    });