javascript - 使用 startAt 和 endAt 的 Firebase 结果范围

标签 javascript firebase firebase-realtime-database

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

相关文章:

android - Firebase:尽管应用程序退出,但继续收听 ChildEventListener

javascript - 从嵌套对象属性中获取排除特定值的最大值

javascript - 单击按钮时颜色不变

firebase - 如何知道哪个registration_id是坏的/过期的/已删除的

javascript - 是否可以撤销 Firebase 列表?

arrays - 获取我的 Firebase 数据库的一部分中的所有子键并显示在 TableView 上

javascript - Vue v-if 语句检查变量是否为空或 null

javascript - 在 AngularJS 中显示 <input> 中选定的文件

javascript - 如何使用 firebase 和 angularfire 立即更新数据列表中的项目?

javascript - CORS BLOCKED 'Access-Control-Allow-Origin' Firebase 功能不允许