Firebase结果范围使用startAt和endAt

时间:2016-01-26 22:39:07

标签: javascript firebase firebase-realtime-database

我正在尝试从我的Firebase数据获得前100个结果,然后是接下来的100个结果,然后是接下来的100个等等。我尝试了多种方式。

版本1

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

第2版

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

第3版

ref.child('products').startAt(0).endAt(100).once('value').then(function(snapshot) {});

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

1 个答案:

答案 0 :(得分: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();
  });
});

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

var nextQuery = productsRef.orderByChild('domain').startAt(lastKnownDomainValue).limitToFirst(100);

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