访问Firebase快照中的第一个数据

时间:2016-01-05 20:24:36

标签: javascript firebase firebase-realtime-database

我尝试仅在包含10个网址的Firebase快照中访问第一个数据的属性。然而,无论我尝试什么,我都会得到整个快照。我的代码如下:

Down

有没有办法在整个快照上指定[0]等,这样我才能获得第一个数据?

3 个答案:

答案 0 :(得分:2)

确定没有看到您的数据结构很棘手,但我认为您正在寻找:

myDataRef.limitToLast(10).on("child_added", function(snapshot) {
  var newImg;
  snapshot.forEach(function(urlSnapshot) {
    if (!newImg) {
      newImg = urlSnapshot.val();
    }
  });
  console.log(newImg);
});

forEach()遍历snapshot的所有子键,并使用每个DataSnapshot调用内部回调。

newImg = urlSnapshot.val();只会获得该孩子的价值。您可能必须根据数据结构修改此位。

答案 1 :(得分:1)

我首先要说的是,没有保证数据在firebase中的存储顺序 - 第一项或第0项的概念取决于数据的存储方式和数据的检索方式。

所以最好的办法是将所有值加载为快照并按指定值(如日期或高度等)排序,然后从排序数组中选择第0个索引,或加载数据子集并使用queryOrderedByChild或queryStartingAtValue

这可能是问题的答案:它只检索指定节点中的第一个值:

users
  user_0
    firstName: "Fred"
  user_1
    firstName: "Bill"
  user_2
    firstName: "Ted"

和代码

usersRef.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
   if snapshot.value is NSNull {
      print("snapshot was NULL")
   } else {
     print(snapshot)
   }
})

和结果

Snap (user_0) {
    firstName = Fred;
}

答案 2 :(得分:0)

您需要先将快照存储为数组,然后将其作为[0]访问。

我不在我的Mac电脑上(我回答你的问题和iOS一样,但我相信这个概念是一样的)所以这只是我的记忆,但如果语法是正确的:

var newImgArray = snapshot.children.objects为? [FSSnapshot] var newImg = newImgArray [0] .value