我可以获取firebase“查询”的第n项吗?

时间:2016-01-29 07:30:53

标签: firebase

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

2 个答案:

答案 0 :(得分:8)

虽然您无法通过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);

答案 1 :(得分: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'