【问题标题】:How to delete parent key by its value in firebase using javascript如何使用javascript通过其在firebase中的值删除父键
【发布时间】:2021-09-21 21:26:32
【问题描述】:

所以我是使用 firebase 实时数据库的新手,我无法删除指定 id 的产品密钥子项。

我尝试过这种方法,但没有成功:

removeProductById = async (id, user) => {
    const userProductRef = db.ref(`products/product`);
    try{
        var query = userProductRef.orderByChild('id').equalTo(id);
        query.remove()             
        })

    }catch(error){
        console.log(`The error has occured ${error.message}`)
    }
}

所以我想知道如何通过他们指定的任何值删除任何密钥提示。提前谢谢你们,你们一直帮助我。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    这里有两个问题:

    1. 您的查询与您要删除的节点不匹配。
    2. Firebase 不支持删除查询。

    您的查询与您要删除的节点不匹配

    您的查询从您的数据库中不存在的节点 products/product 开始,然后对每个子节点的 id 属性进行排序/过滤。

    您想要的是从products 节点开始,然后对每个子节点的product/id 属性进行排序/过滤:

    在代码中:

    const userProductRef = db.ref(`products`);
    var query = userProductRef.orderByChild('product/id').equalTo(id);
    

    不要忘记,您需要在规则中的 products 级别为此定义 product/id 的索引。

    Firebase 不支持删除查询

    您不能简单地将查询和删除指令传递给 Firebase。要在数据库中写入节点,您需要知道该节点的完整路径。

    所以你需要:

    1. 执行查询。
    2. 在您的应用程序代码中循环遍历结果。
    3. 单独或在多路径更新中删除每个匹配节点。

    有了上面的query,那就是:

    query.once("value").then((snapshot) => {
      snapshot.forEach((child) => {
        child.ref.remove();
      });
    })
    

    或者使用多路径/批量更新:

    query.once("value").then((snapshot) => {
      let updates = {};
      snapshot.forEach((child) => {
        updates[child.key] = null;
      });
      ref.update(updates);
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2015-03-29
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多