我遇到了一个不知道解决办法的问题。 在 Firebase RealtimeDatabase 中,我通过 ref.push(); 创建了一个字符串列表 现在我需要稍后访问我通过 ref.push(); 创建的最后一个对象。 因为我需要在另一个实例中访问它,所以我无法直接从函数中获取新引用的 key 。
检索此类列表的最后一个项目的正确方法是什么? 我摆弄了各种方法(即像普通数组一样访问 if ,然后获取该数组的最后一个元素),但到目前为止没有任何效果。
如果有人能帮助我解决这个问题,我会非常高兴。
编辑:
数据库的相关部分如下所示:
我通过调用在另一个函数中创建了列表
var newRef = admin.database().ref(`PATH/TO/LIST`).push();
newRef.set("someString");
因为我生成了之前的项目,所以我不能只将 newRef
传递给我需要它的函数来访问该项目。
最佳答案
执行如下操作:
firebase.database().ref('PATH/TO/LIST').limitToLast(1).once('value')
.then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
console.log(childSnapshot.val());
});
});
有两点需要注意:
- “push() 生成的唯一键按当前时间排序,因此生成的项目列表将按时间顺序排序”,如文档中所述: https://firebase.google.com/docs/reference/js/firebase.database.Reference#push 。因此您的项目会按时间顺序排序。
- 您必须循环一次的结果,因为在构造
查询
时使用了limitToLast()
方法,该查询始终返回“记录集”(即DataSnapshot
表示与您的查询匹配的数据子集),即使查询结果只有一项。
编辑您的评论:
var ref = firebase.database().ref('PATH/TO/LIST');
ref.limitToLast(1).once('value')
.then(function(snapshot) {
var itemKey;
snapshot.forEach(function(childSnapshot) {
itemKey = childSnapshot.key;
console.log(itemKey);
});
return ref.child(itemKey).set('someString3NEW');
})
.catch(function(error) {
console.log(error);
});
您获得要更改的节点的键(使用与上面相同的查询),然后使用 set()
方法更改其值。
关于javascript - (Javascript) 访问 Firebase 实时数据库列表中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50210482/