如何删除firebase中的大型节点

如何删除firebase中的大型节点,firebase,Firebase,我有一个Firebase子节点,它有大约1500000个子对象,总大小约为8GB的数据 示例数据结构: firebase.com/childNode/$pushKey each $pushKey contains a small flat dictionary: {a: 1.0, b: 2.0, c: 3.0} 我希望尽可能高效、轻松地删除此数据。怎么做? 我尝试的是: 我的第一次尝试是put请求: PUT firebase.com/childNode.json?auth=FIRE_SEC

我有一个Firebase子节点,它有大约1500000个子对象,总大小约为8GB的数据

示例数据结构:

firebase.com/childNode/$pushKey

each $pushKey contains a small flat dictionary: 
{a: 1.0, b: 2.0, c: 3.0}
我希望尽可能高效、轻松地删除此数据。怎么做?

我尝试的是: 我的第一次尝试是put请求:

PUT firebase.com/childNode.json?auth=FIRE_SECRET
data-raw: null
PUT firebase.com/childNode.json?auth=FIRE_SECRET&orderBy="$key"&limitToFirst=100
data-raw: null
答复:{ “错误”:“请求的数据超过了单个请求可以访问的最大大小。请与联系。”support@firebase.com寻求帮助。” }

所以这不起作用,让我们做一个限制请求:

PUT firebase.com/childNode.json?auth=FIRE_SECRET
data-raw: null
PUT firebase.com/childNode.json?auth=FIRE_SECRET&orderBy="$key"&limitToFirst=100
data-raw: null
答复:{ “错误”:“查询此请求类型不支持的相关参数” }

到目前为止还不走运:(编写一个脚本,获取前X个键,然后创建一个补丁请求,每个值都设置为null,怎么样

GET firebase.com/childNode.json?auth=FIRE_SECRET&shallow=true&orderBy="$key"&limitToLast=100
{ “错误”:“不支持混合‘浅’参数和查询参数” }

这一次真的不容易?我可以去掉肤浅的要求,拿到钥匙,完成脚本。我只是希望有一个更简单/更有效的方法

我尝试的另一件事是创建一个节点脚本来侦听添加的childAdded,然后直接尝试删除这些子节点

ref.authWithCustomToken(AUTH_TOKEN, function(error, authData) {
  if (error) {console.log("Login Failed!", error)}
  if (!error) {console.log("Login Succeeded!", authData)}

  ref.child("childNode").on("child_added", function(snap) {
    console.log(`found: ${snap.key()}`)
    ref.child("childNode").child(snap.key()).remove( function(err) {
      if (!err) {console.log(`deleted: ${snap.key()}`)}
    })
  })
})

这个脚本现在实际上挂起了,但早些时候我确实收到了firebase发出的“最大堆栈限制”警告。我知道这不是firebase的问题,但我看不到任何特别简单的方法来解决这个问题。

下载一个浅树只会下载密钥。因此,您不需要要求服务器订购和限制,而可以下载所有密钥

然后,您可以在客户端对其进行订购和限制,并批量向Firebase发送删除请求


您可以使用此脚本获得灵感:

使用firebase cli工具实现以下目的:firebase数据库:删除--项目。

在浏览器控制台中,这是最快的方法

database.ref('data').limitToFirst(10000)。once('value',snap=>{
var更新={};
snap.forEach(snap=>{
更新[snap.key]=null;
});
database.ref('data').update(更新);

});

如果我没记错的话,那么挑战只是删除一个节点,而不是一个完整的项目。@AndreasOkholm:对不起,我的错误是删除--项目仅供参考,旧的CLI版本无法删除大节点,但最新版本可以。