0

我刚刚开始使用firebase。我有一个由 id 索引的 6 条记录的文档。我想查询和同步列表中的前 3 个项目。

var metals = new Firebase("https://<dbname>.firebaseio.com/metals").limit(3);
$scope.metals = $firebase(metals);

这提供了列表中的最后 3 个项目。不是我想要的。

所以要获得前3 个项目,我认为这会起作用,但它打破了......

var metals = new Firebase("https://<dbname>.firebaseio.com/metals").startAt(1).endAt(3);
$scope.metals = $firebase(metals);

我的数据结构:

{
  "metals" : [ null, 
    {
      "id" : 1,
      "metal" : "Aluminium",
      "element" : "Au" 
    }, {
      "id" : 2,
      "metal" : "Silver",
      "element" : "Ag"
    }, {
      "id" : 3,
      "metal" : "Copper",
      "element" : "Cu"
    }, {
      "id" : 4,
      "metal" : "Tin",
      "element" : "Sn"
    }, {
      "id" : 5,
      "metal" : "Nickel",
      "element" : "Ni"
    }, {
      "id" : 6,
      "metal" : "Iron",
      "element" : "Fe"
    }]
}

HTML 视图:

4

1 回答 1

3

传递给startAt的第一个参数是优先级,而不是记录键。由于在这种情况下看起来您不需要密钥或优先级,因此您可以简单地使用以下语法来获取前三个项目:

new Firebase(URL).startAt().limit(3)

此外,存储在示例数据的每条记录中的“id”不是该记录的键,它只是数据中的另一个字段,就查询而言,它也可能是“foo”或任何其他任意名称。

当这些记录存储在 Firebase 中时,数组将转换为一个对象,并且索引用作每个条目的键。所以第一条记录的 id 是 0,而不是 1。所以如果我想获取第二条到第四条记录(例如,你尝试的 1 到 3 条),我可以这样做:

new Firebase(URL).startAt(null, 1).limit(3)

请仔细阅读数据文档列表和我们关于阵列最佳实践的博客;大多数时候,您会希望避免使用这些并使用唯一 ID。

于 2014-06-17T14:58:18.973 回答