【问题标题】:Firebase remove() entire nested array in databaseFirebase remove() 数据库中的整个嵌套数组
【发布时间】:2017-02-15 02:09:58
【问题描述】:

如何通过引用条目以找到所需的删除点,从 Firebase 数据库中删除整个嵌套子项?

例如,我在 (list) 下嵌套了两个条目。 (1) -KcxacywN4EkvwAzugfV 和 (2) -KcxaeBAIW-WgLAsajvV。我想使用它的 ID -KcxaeBAIW-WgLAsajvU-4-725391765511696 从数据库中删除 (2) -KcxaeBAIW-WgLAsajvV(见下图)。

我为每个数据库条目设置了一个按钮,以显示一个删除按钮。每个按钮都包含每个数据库条目的 data-ID

rootRef.on("child_added", snap => {
    var title = snap.child("title").val();
    var link = snap.child("link").val();
    var type = snap.child("type").val();
    var id = snap.child("id").val();
      $("#table_data").append("<div class='col-lg-4'><div class='card card-app'><div class='card-block'><h4 class='card-title'>"+ title +"</h4><small>"+ type +"</small><hr><a href='"+ link +"' target='_blank'>Download</a>           <a class='user float-right' onclick='removeClick()' data-name='"+ id +"'>Remove</a>            </div></div></div>");
  });

按钮的onClick事件和关联的id,触发这个函数。我的想法是,然后从 data- 中获取 ID 以删除其嵌套的孩子,(2)-KcxaeBAIW-WgLAsajvV 从数据库中。所有其他嵌套条目的过程相同。

function removeClick() {
  $(".user").click(function() {
        rvm = $(this).attr("data-name");
    });
  alert(rvm);
  firebaseRef.remove(rvm);
}

我研究了https://firebase.google.com/docs/database/web/read-and-write,似乎无法弄清楚嵌套条目的实际删除。如何使用 remove() 或其他方法来完成此操作?

我一直在尝试这个,以获得更好的理解。

firebaseRef.child(rvm).remove();

因为 rootRef,我是如何查看数据的。我试过了。

rootRef.child().remove();

这只是删除了整个数据库...

最终运行代码:

function removeClick() {
  $(".user").click(function() {
        rvm = $(this).attr("data-name");
  });
  alert(rvm);
  var query = rootRef.orderByChild("id").equalTo(rvm);
  query.once("value", function(snapshot) {
   snapshot.forEach(function(itemSnapshot) {
       itemSnapshot.ref.remove();
   });
 });
}

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    只有知道密钥的情况下才能删除项目。因此,鉴于您当前的结构,您首先需要查找您提到的 id 的键。

    假设您有一个变量ref 指向数据库的根:

    var listRef = ref.child("list");
    var query = listRef.orderByChild("id").equalTo("-KcxaeBAIW-WgLAsajvU-4-725391765511696");
    query.once("value", function(snapshot) {
       snapshot.forEach(function(itemSnapshot) {
           itemSnapshot.ref.remove();
       }); 
    });
    

    如果您只有一个具有 id 的孩子,则应考虑重组数据库以使用 id 作为键。如果你这样做,你可以删除该项目:

    listRef.child("-KcxaeBAIW-WgLAsajvU-4-725391765511696").remove()
    

    【讨论】:

    • 成功了!谢谢你。我现在明白了,您必须以某种方式将参考等同起来。我已经发布了问题,工作代码。
    猜你喜欢
    • 2017-05-28
    • 2018-05-15
    • 2020-02-26
    • 2017-02-12
    • 2017-04-27
    • 2018-08-23
    • 1970-01-01
    • 2018-03-19
    • 2021-01-08
    相关资源
    最近更新 更多