我正在尝试从我的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中获取我所追求的数据范围?
答案 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
。