访问 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;
}
我试图仅在包含 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;
}