Firebase结果范围使用startAt和endAt

Tom*_*ton 5 javascript firebase firebase-realtime-database

我试图从我的Firebase数据获得前100个结果,然后是接下来的100个,然后是接下来的100个等等.我尝试过多种方式.

版本1

ref.child('products').orderByChild('domain').startAt(0).endAt(100).once('value').then(function(snapshot) {});
Run Code Online (Sandbox Code Playgroud)

版本2

ref.child('products').orderByChild('domain').startAt(0).limitToFirst(100).once('value').then(function(snapshot) {});
Run Code Online (Sandbox Code Playgroud)

版本3

ref.child('products').startAt(0).endAt(100).once('value').then(function(snapshot) {});
Run Code Online (Sandbox Code Playgroud)

每次返回的快照都为null.无论如何在Firebase中获取我所追求的数据范围?

Fra*_*len 7

当您调用orderByChild()任何后续调用时startAt(),endAt()或者equalTo()期望您传入的值为子级.你正在传递一个索引.除非值domain是一个顺序索引(极不可能),否则这将不起作用.

你应该做的是记住domain你得到的最后一个孩子的价值,然后将其传递给startAt()下一个"页面".

var productsRef = ref.child('products');
var lastKnownDomainValue = null;
var pageQuery = productsRef.orderByChild('domain').limitToFirst(100);
pageQuery.once('value', function(snapshot) {
  snapshot.forEach(function(childSnapshot) {
    lastKnownDomainValue = childSnapshot.child('domain').val();
  });
});
Run Code Online (Sandbox Code Playgroud)

现在你有一个变量lastKnownDomainValue,它有你见过的最后一个域.要获取下一批子项,请将该值传递给startAt():

var nextQuery = productsRef.orderByChild('domain').startAt(lastKnownDomainValue).limitToFirst(100);
Run Code Online (Sandbox Code Playgroud)

然后lastKnownDomainValue当你再次循环孩子时更新.