使用 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
。
我正在尝试从我的 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
。