javascript - 删除超过 2 小时的 Firebase 数据

标签 javascript angularjs firebase firebase-realtime-database

我想删除超过两小时的数据。目前,在客户端,我循环遍历所有数据并对过时的数据运行删除。当我这样做时,db.on('value')每次删除某些内容时都会调用该函数。另外,只有当客户端连接时才会删除内容,如果两个客户端同时连接会发生什么?

在哪里可以设置删除旧数据的功能?我在 JavaScript Date.now() 创建的每个对象内都有一个时间戳.

最佳答案

Firebase 不支持使用动态参数的查询,例如“两小时前”。但是,它可以对特定值执行查询,例如“2015 年 8 月 14 日上午 7:27:32 之后”。

这意味着您可以定期运行一段代码来清理当时超过 2 小时的项目:

var ref = firebase.database().ref('/path/to/items/');
var now = Date.now();
var cutoff = now - 2 * 60 * 60 * 1000;
var old = ref.orderByChild('timestamp').endAt(cutoff).limitToLast(1);
var listener = old.on('child_added', function(snapshot) {
    snapshot.ref.remove();
});

您会注意到,我使用 child_added 而不是 value,并且使用 limitToLast(1)。当我删除每个子项时,Firebase 将为新的“最后”项触发 child_added,直到截止点之后不再有项。

更新:如果您想在 Cloud Functions for Firebase 中运行此代码:

exports.deleteOldItems = functions.database.ref('/path/to/items/{pushId}')
.onWrite((change, context) => {
  var ref = change.after.ref.parent; // reference to the items
  var now = Date.now();
  var cutoff = now - 2 * 60 * 60 * 1000;
  var oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff);
  return oldItemsQuery.once('value', function(snapshot) {
    // create a map with all children that need to be removed
    var updates = {};
    snapshot.forEach(function(child) {
      updates[child.key] = null
    });
    // execute all updates in one go and return the result to end the function
    return ref.update(updates);
  });
});

只要在/path/to/items下写入数据,就会触发该函数,因此只有在修改数据时才会删除子节点。

此代码现在也可在 functions-samples repo 中找到。 .

关于javascript - 删除超过 2 小时的 Firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32004582/

相关文章:

javascript - Thinkster MEAN 堆栈教程

javascript - 记住 ng-grid 分组打开||折叠状态

angularjs - 如何查找更改正在监视的对象的调用站点

ios - 在类型 'remoteMessageDelegate' 的对象上找不到属性 'FIRMessaging *'

firebase - 如何在 Flutter 的隔离区中运行 Firebase 查询

javascript - 如何对 luxon 对象数组执行排序

javascript - Chart.js 解析器返回错误的日期(突然回到 1990 年)

javascript - 合并具有相同键值的 JavaScript 对象并对其进行计数

swift - Firebase 身份验证的电子邮件验证

javascript - react Material UI 数据网格 : Cannot read property 'useRef' of undefined