You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Realtime Database如何迭代查询并删除coins值为0的用户子节点

解决方案

你代码的核心问题出在查询路径和类型匹配两个环节:

  • 原代码的dbref.child("Users").child("coins")指向的是/Users/coins路径,而实际coins是Users下每个用户子节点的内部字段,查询根路径应该直接设置为Users节点,再指定按coins子字段排序
  • 如果你的coins字段是数值存储类型,equalTo("0")传入字符串会触发类型不匹配,导致无法命中任何数据,需要改为传入数值0

修正后的代码如下:

// 根路径改为Users节点
DatabaseReference usersRef = dbref.child("Users");
// 按子字段coins排序,匹配值为0的节点
Query deleteQuery = usersRef.orderByChild("coins").equalTo(0);
deleteQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
            // 直接删除匹配到的用户节点
            userSnapshot.getRef().removeValue();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

补充说明

  • 如果你确认数据库里coins存储的是字符串类型的"0",可以把equalTo(0)改回equalTo("0")即可
  • 代码里直接调用removeValue()比setValue(null)语义更清晰,效果一致

内容的提问来源于stack exchange,提问作者Harry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:36:03