如何在Firebase中获取一组特定键?

时间:2015-07-12 16:45:32

标签: angularjs firebase

enter image description here

说我想只获取包含密钥的项目:" -Ju2-oZ8sJIES8_shkTv"," -Ju2-zGVMuX9tMGfySko"," -Ju202XUwybotkDPloeo&# 34 ;.

var items = new Firebase("https://hello-cambodia.firebaseio.com/items");
items.orderByKey().equalTo("-Ju2-gVQbXNgxMlojo-T").once('value', function(snap1){
    items.orderByKey().equalTo("-Ju2-zGVMuX9tMGfySko").once('value', function(snap2){
        items.orderByKey().equalTo("-Ju202XUwybotkDPloeo").once('value', function(snap3){
            console.log(snap1.val());
            console.log(snap2.val());
            console.log(snap3.val());
        })
    })
});

我不觉得这是获取项目的正确方法,尤其是当我有1000个密钥来获取时。

如果可能的话,我真的希望能给出一组数组 喜欢

var itemKeys = ["-Ju2-gVQbXNgxMlojo-T","-Ju2-zGVMuX9tMGfySko", "-Ju202XUwybotkDPloeo"];
var items = new Firebase("https://hello-cambodia.firebaseio.com/items");
    items.orderByKey().equalTo(itemKeys).once('value', function(snap){
       console.log(snap.val());
  });

任何建议将不胜感激。

由于

2 个答案:

答案 0 :(得分:2)

这样做:

items.orderByKey().equalTo("-Ju2-gVQbXNgxMlojo-T")

给出完全相同的结果:

items.child("-Ju2-gVQbXNgxMlojo-T")

但后者不仅更具可读性,还可以防止扫描索引。

但你要回答的是为什么要选择这三个项目?是因为它们都具有相同的状态吗?因为他们陷入了特定的日期范围?因为用户在列表中选择了它们?只要您能够确定选择这三个项目的原因,就可以将选择转换为查询。 E.g。

var recentItems = ref.orderByChild("createdTimestamp")
                     .startAt(Date.now() - 24*60*60*1000)
                     .endAt(Date.now());
recentItems.on('child_added'...

如果您有一个包含时间戳的字段,此查询会为您提供过去一天的项目。

答案 1 :(得分:1)

您可以使用Firebase子级。例如,

    var currFirebaseRoom = new Firebase(yourFirebaseURL)
    var userRef = currFirebaseRoom.child('users');

现在您可以使用

访问此孩子了
     userRef.on('value', function(userSnapshot) {
          //your code
     }

您通常不应使用Firebase密钥访问内容。创建一个名为data的子项并将所有值放在那里,然后您可以通过该子引用访问它们。