您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JavaScript删除2个小时之前的Firebase数据

JavaScript删除2个小时之前的Firebase数据

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

这意味着,你可以定期运行的代码片段是年长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而不是valuelimitToLast(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仓库中使用。

javascript 2022/1/1 18:20:25 有458人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶