我正在尝试从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/