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
相关产品推荐
相关产品推荐

