如何在Firebase Realtime Database中查询指定属性子节点及员工账号数据
Firebase Realtime Database 获取子节点指定属性的方法
你的数据库结构如下图所示:
当然可以实现该需求,你可以通过遍历员工父节点下的所有子节点,按需提取username和password两个属性即可,不需要拉取节点下的全部冗余字段。
常用端实现示例
Web/JavaScript 端
import { getDatabase, ref, get } from "firebase/database"; const db = getDatabase(); // 指向员工根节点 const employeesRef = ref(db, 'employees/'); get(employeesRef).then((snapshot) => { if (snapshot.exists()) { const userList = []; // 遍历所有员工子节点 snapshot.forEach((empSnapshot) => { // 仅提取需要的两个属性 const userInfo = { username: empSnapshot.child('username').val(), password: empSnapshot.child('password').val() } userList.push(userInfo); }); // 此处可自行处理拿到的用户账号密码数组 console.log(userList); } else { console.log("无员工数据"); } }).catch((err) => { console.error("查询失败:", err); });
Android Java 端
DatabaseReference empRef = FirebaseDatabase.getInstance().getReference("employees"); empRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { List<Map<String, String>> credentialList = new ArrayList<>(); for (DataSnapshot empSnap : snapshot.getChildren()) { String uname = empSnap.child("username").getValue(String.class); String pwd = empSnap.child("password").getValue(String.class); Map<String, String> item = new HashMap<>(); item.put("username", uname); item.put("password", pwd); credentialList.add(item); } // 处理获取到的账号密码数据 } @Override public void onCancelled(DatabaseError error) { Log.e("查询错误", error.getMessage()); } });
重要提示:明文存储用户密码属于高风险操作,生产环境一定要对密码进行加盐哈希处理后再存入数据库,避免数据泄露造成用户资产损失。
内容的提问来源于stack exchange,提问作者Usman Minhas
相关产品推荐
相关产品推荐

