使用 startAt 和 endAt 的 Firebase 结果范围

Firebase results range using startAt and endAt

我正在尝试从我的 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() 用于下一个 "page"。

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,其中包含您所见过的最后一个域。要获得下一批 children,请将该值传递给 startAt():

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

然后当你再次遍历 children 时更新 lastKnownDomainValue