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

Access first datum in Firebase snapshot

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

myDataRef.limitToLast(10).on("child_added", function(snapshot) {
 var newImg = snapshot.child("url");
  console.log(newImg);
});

有没有办法在整个快照上指定 [0] 等,以便我只获取第一个数据?

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

我不在我的 mac 电脑前(我正在回答你关于 iOS 的问题,但我相信概念是一样的)所以这只是我的记忆,但是如果语法正确,它会起作用:

var newImgArray = snapshot.children.objects 作为? [FSS快照] var newImg = newImgArray[0].value

在没有看到您的数据结构的情况下很难确定,但我认为您正在寻找:

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

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

newImg = urlSnapshot.val(); 会得到 child 的值。您可能需要根据您的数据结构修改此位。

让我更喜欢这一点,因为数据在 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;
}