我尝试从我的 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
的值是顺序索引(极不可能),这是行不通的。
你应该做的是记住 domain
你得到的最后一个 child 的值(value),然后将其传递给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
当你再次遍历 child 时。
关于javascript - 使用 startAt 和 endAt 的 Firebase 结果范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025419/