gpt4 book ai didi

javascript - 如何在不下载和上传数据的情况下复制具有许多记录的 Firebase child ?

转载 作者:行者123 更新时间:2023-11-30 12:06:07 25 4
gpt4 key购买 nike

我有一个拥有近 50 万条记录的 Firebase child 。我想复制这个 child 以创建数据备份(在同一个 Firebase 中)。因此,如果我的 child 名为 lines,我想复制它,但使用一个新名称,例如 lines_backup_02_02_2016。一旦完成,我希望原始的 lines 保持原样。

有没有什么方法可以在不通过 Javascript 获取 dataSnapshot(下载数据)然后使用 set() 创建副本的情况下执行此操作?例如:

fb.child("lines").once('value', function(snapshot) {
fb.child("lines_backup_02_02_2016").set(snapshot.val());
});

对于 500k 条记录,我发现这比我到目前为止能够等待的时间更长(例如,我在等待它完成时输入了这个问题)。

最佳答案

尝试访问/查询具有 500k 子记录的节点是个坏主意。您也不太可能需要将这 500k 行同步给用户。因此,请努力将事件数据与历史数据分开。您当前创建备份副本的方法是一个很好的开始。当您将节点写入新位置时,还可以删除节点。

要获取此数据将“有点复杂”。它确实涉及首先通过浅 REST 调用获取子键列表:

https://yours.firebaseio.com/path-to-list.json?shallow=true

然后使用常规 JavaScript 客户端循环遍历键并依次访问每个子项:

ref.child('path-to-list').child(key).once('value', function(snapshot) {
ref.child('path-to-backup').child(key).set(snapshot.val(), function(error) {
if (!error) {
// Delete the original item, so that the list stays small
snapshot.ref().remove();
}
});

});

这个循环不会产生问题,因为您没有查询整个列表。相反,您直接访问特定的子节点,这很好。

一定要限制循环,否则你可能会用小的写入淹没你的数据库。

关于javascript - 如何在不下载和上传数据的情况下复制具有许多记录的 Firebase child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com