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

Access first datum in Firebase snapshot

本文关键字:第一个 数据 Firebase 快照 访问      更新时间:2023-09-26

我试图仅在由10个URL组成的Firebase快照中访问第一个数据的属性。然而,无论我尝试什么,我都会得到完整的快照。我的代码看起来像:

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

有没有办法在整个快照上指定[0]或类似的东西,这样我就可以得到第一个数据?

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

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();将只获取该子项的值。您可能需要根据您的数据结构修改此位。

让我更倾向于这样说,数据在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;
}

您需要先将快照存储为数组,然后以[0]的形式访问它。

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

var newImgArray=快照.children.object为?[FS快照]var newImg=newImgArray[0]。value