Kotlin中Firebase实时数据库按creadoPor删除指定子节点问题
解决Firebase Realtime Database按子节点值删除指定节点的问题
完全可以跳过手动记录自动生成的子节点键值,直接通过Firebase的查询功能定位到creadoPor值匹配的节点,再执行删除操作,具体实现如下:
代码示例
Kotlin版本
val query = FirebaseDatabase.getInstance().reference.child("Comentarios") .orderByChild("creadoPor") .equalTo("你要匹配的creadoPor值") query.addListenerForSingleValueEvent(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { // 遍历所有匹配的节点并删除 snapshot.children.forEach { childSnapshot -> childSnapshot.ref.removeValue() } } override fun onCancelled(error: DatabaseError) { Log.e("Firebase", "查询失败", error.toException()) } })
Java版本
Query query = FirebaseDatabase.getInstance().getReference("Comentarios") .orderByChild("creadoPor") .equalTo("你要匹配的creadoPor值"); query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataSnapshot.getChildren()) { snapshot.getRef().removeValue(); } } @Override public void onCancelled(DatabaseError databaseError) { Log.e("Firebase", "查询取消", databaseError.toException()); } });
关键说明
- 上述代码通过
orderByChild("creadoPor")和equalTo()筛选出所有符合条件的节点,无需提前存储自动生成的键值 - 当节点数量较多时,建议在Firebase控制台为
creadoPor字段配置索引,避免查询性能下降,索引规则如下:
{ "rules": { "Comentarios": { ".indexOn": ["creadoPor"] } } }
内容的提问来源于stack exchange,提问作者Monrac
相关产品推荐
相关产品推荐

