当前位置: 首页 > 面试题库 >

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

上官高翰
2023-03-14
问题内容

我想删除任何早于两个小时的数据。当前,在客户端,我遍历所有数据,并对任何较旧的数据运行删除操作。当我这样做时,每次删除某些内容时都会调用db.on(’value’)函数。而且,只有在客户端连接时,事物才会被删除;如果两个客户端同时连接,会发生什么?

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


问题答案:

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仓库中使用。



 类似资料:
  • 我在我的react本地应用程序中使用Firebase实时数据库。大多数事情都是通过REST API云函数来完成的。app中很少东西直接使用实时数据库。最近,我发现我数据库中的所有数据都被莫名其妙地删除了。甚至数据库中不再使用且未在我的应用程序/云功能的源代码中引用的部分也消失了。 问题发生在两个项目及其数据库(生产/测试)中。我必须使用备份来恢复它们,但即使没有人使用应用程序(例如,在测试环境中)

  • 问题内容: 我想删除十进制数字中的前导零。 所以我想输出应该是 没有 。我尝试过不工作,我也尝试过正则表达式!没有结果!是的,我正在使用BigDecimal。 问题答案: 试试这个

  • 我以为上面的办法行得通,但它失败了。我把它放在渲染行部分。它出现了reference.remove失败。第一个参数必须是有效的函数。就像在这些房间里,它有信息,我认为这是我出错的地方,但我不知道如何去做它。谢谢。

  • 由按键生成的firebase子节点 使用Javascript,如何在firebase实时数据库上删除由push key生成的子节点 上面的代码用于向实时数据库添加数据

  • 我是一个firebase用户,最近深入研究了rtdb,刚刚发现了一个限制文档,解释了单个数据库实例的写入限制,并引用了下面的引文: 单个数据库上每秒写入操作的限制。虽然不是硬限制,但如果每秒写入次数超过1000次,则写入活动可能会受到速率限制。 例如,在firestore的安全规则中,删除操作属于写操作的范畴,我猜这样的概念也适用于其他firebase服务。所以我想确切地知道< code>dele

  • 如果我使用每日翻转,那么我可以看到翻转日志被维护到中提到的天数 maxHistory只适用于日常翻转吗?