删除2小时以上的火灾数据

删除2小时以上的火灾数据

我想删除两个小时以上的任何数据。目前,在客户端,我循环遍历所有数据,并在任何较旧的数据上运行DELETE。当我这样做时,每次删除某个内容时都会调用db.on(‘value’)函数。另外,只有在客户端连接时才会删除这些内容,如果两个客户端同时连接,会发生什么情况?

我可以在哪里设置删除旧数据的东西?我在JavaScriptDate.Now()创建的每个对象中都有一个时间戳。


婷婷同学_
浏览 555回答 3
3回答

海绵宝宝撒

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对于新的“最后”项,直到在截止点之后没有更多的项为止。更新如果您想在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回购.

茅侃侃

你可以调查用Cron作业调度Firebase函数..该链接向您展示了如何安排FireBaseCloud函数以固定的速度运行。在计划好的Firebase函数中,您可以使用此线程中的其他答案查询旧数据并删除它。
打开App,查看更多内容
随时随地看视频慕课网APP