【问题标题】:Can I get the nth item of a firebase "query"?我可以获得firebase“查询”的第n个项目吗?
【发布时间】:2018-03-17 16:23:47
【问题描述】:

Firebase 具有一些非常基本的查询功能,如 orderBy*limitTo*startAt() 等。 有没有办法告诉 Firebase 你想要请求的第 10 个结果?例如,我使用的是orderByKey()。由于键是这些 awesome 神奇的字符串,因此您不能使用整数来引用其中的任何位置。我想在键中存储一个指向某个位置的指针并在其中移动。我想orderByKey(),任意获取key N,可以吗?

【问题讨论】:

    标签: firebase


    【解决方案1】:

    虽然您无法通过 Firebase 的索引访问子项目,但您可以存储项目的键并使用它来启动下一个查询。

    var ref = new Firebase('https://yours.firebaseio.com/items');
    var lastKnownKey = null;
    var firstQuery = ref.orderByKey().limitToFirst(100);
    firstQuery.once('value', function(snapshot) {
      snapshot.forEach(function(childSnapshot) {
        lastKnownKey = childSnapshot.key();
      });
    });
    

    现在你有一个变量lastKnownKey,它有你见过的最后一个键。要获得下一批孩子,您可以将该值传递给 startAt()

    var nextQuery = ref.orderByKey().startAt(lastKnownKey).limitToFirst(100);
    

    【讨论】:

      【解决方案2】:

      请注意,结合@frank-van-puffelen 的回答,您还可以将shallow 参数用于顶级查询。

      我不知道如何将其转换为 JavaScript firebase API,但使用 curl,这将类似于:

      curl 'https://your-site.firebaseio.com/questions.json?shallow=true'
      

      返回类似:

      {
        "-Ju2tGTo6htY2e4mbuPO": true,
        "-Ju3AWjZnhnUw_OfGyk4": true,
        "-JughjjzbFOxjevE2ykY": true,
        "-Jw3cciI6ZpoK1ejfK58": true,
        "-Jw4NhcgJ9DnenBVphyq": true,
        "-JwE5ojQ5ZjkvTzVK9E2": true,
        "-JwE7Qbpf9r1YN8Qaoss": true,
        "-JwFIQ3pGMCI0E3xzPIz": true,
      }
      

      然后,一旦你得到你的浅表项目,你可以通过直接访问密钥以任何你想要的顺序一次查询它们:

      curl 'https://your-site.firebaseio.com/questions/-Ju2tGTo6htY2e4mbuPO.json'
      

      【讨论】:

      • 是的。很好的补充。您确实可以通过这种方式直接处理特定消息,或者在 startAt() 调用中使用浅 JSON 中的键。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2011-02-13
      相关资源
      最近更新 更多