0

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

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视图:

回答

3

传递到startAt的第一个参数是优先级,而不是记录键。因为它看起来并不像你需要在这种情况下,关键或优先级,你可以简单地这样的语法扎破前三项:

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

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

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

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

请有一个彻底的读lists of data doc和我们的博客array best practices;大多数时候,你会想要避免这些,并使用唯一的ID。

相关问题