javascript - (Javascript) 访问 Firebase 实时数据库列表中的最后一个元素

标签 javascript firebase firebase-realtime-database

我遇到了一个不知道解决办法的问题。 在 Firebase RealtimeDatabase 中,我通过 ref.push(); 创建了一个字符串列表 现在我需要稍后访问我通过 ref.push(); 创建的最后一个对象。 因为我需要在另一个实例中访问它,所以我无法直接从函数中获取新引用的 key 。

检索此类列表的最后一个项目的正确方法是什么? 我摆弄了各种方法(即像普通数组一样访问 if ,然后获取该数组的最后一个元素),但到目前为止没有任何效果。

如果有人能帮助我解决这个问题,我会非常高兴。

编辑:

数据库的相关部分如下所示:

relevant_part

我通过调用在另一个函数中创建了列表

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());
     });
});

有两点需要注意:

  1. “push() 生成的唯一键按当前时间排序,因此生成的项目列表将按时间顺序排序”,如文档中所述: https://firebase.google.com/docs/reference/js/firebase.database.Reference#push 。因此您的项目会按时间顺序排序。
  2. 您必须循环一次的结果,因为在构造查询时使用了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/

相关文章:

javascript - 如何使用 ajax 接收 Instagram 登录 token

javascript - 复制数组 javascript 拼接

javascript - JS 将对象推送到变量将最后一个对象添加到所有元素

firebase - 为什么在对数据进行非规范化时使用对象?

javascript - 同心圆中心的 Canvas 文本

firebase - 如何向 firebase.auth() 添加附加信息

arrays - 异步访问 Firebase 中的数组

firebase-realtime-database - Firebase 数据库模拟器未启动(其他模拟器正在运行)

swift - 从 firebase 检索数据返回 nil

android - Firebase 数据库快速入门处理计数的方式是否安全?