我正在尝试从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) {});

每次返回的快照均为空。无论如何,Firebase中是否有我要获取的数据范围的信息?

最佳答案

当您调用orderByChild()时,对startAt()endAt()equalTo()的任何后续调用都希望您传入的值是 child 。您正在传递索引。除非domain的值是顺序索引(极不可能),否则它将不起作用。

您应该做的是记住最后一个 child 的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变量,该变量具有您见过的最后一个域。要获取下一批 child ,请将该值传递给startAt():
var nextQuery = productsRef.orderByChild('domain').startAt(lastKnownDomainValue).limitToFirst(100);

然后,当您再次遍历子级时,您将更新lastKnownDomainValue

关于javascript - Firebase结果范围使用startAt和endAt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35025419/

10-11 12:27