我遇到了一个问题,我不知道解决方案。
在Firebase RealtimeDatabase中,我通过ref.push();
创建了一个字符串列表
现在我需要稍后访问我通过ref.push();
创建的最后一个对象。
因为我需要在另一个实例中访问它,所以我无法直接从函数中获取新引用的键。
检索此类列表的最后一项的正确方法是什么? 我以各种方式摆弄(即,像正常数组一样访问,然后抓取该数组的最后一个元素),但到目前为止没有任何工作。
如果有人可以帮助我,我会很高兴。
编辑:
数据库的相关部分如下所示:
我通过调用
在另一个函数中创建了列表var newRef = admin.database().ref(`PATH/TO/LIST`).push();
newRef.set("someString");
因为我生成了之前的项目,所以我不能只将newRef
传递给我需要的函数来访问该项目。
答案 0 :(得分:2)
请执行以下操作:
firebase.database().ref('PATH/TO/LIST').limitToLast(1).once('value')
.then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
console.log(childSnapshot.val());
});
});
需要注意的两点:
limitToLast()
时使用了query
方法,它总是返回一组“记录”(即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()
方法更改其值。