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

如何检索通过Firebase push()存入的用户详情数据?

用户详情检索方案

关于用orderByKey()实现的可行性

可以用,但当前数据结构下这么做效率极低,完全没必要。

当前数据结构的问题

你现在的写入逻辑是在users下先创建随机pushID,再在pushID下以用户UID为键存储数据,结构为users/{pushId}/{uid}/{用户字段}。这种多层嵌套结构会让检索变得繁琐——你得先遍历所有pushID,才能找到对应UID的节点。

更高效的写法(推荐)

直接把用户UID作为users的子节点键,不需要用push(),写入和检索都能一步到位:

修改后的写入代码

final refDataInstance = FirebaseDatabase.instance.ref().child("users");
// 直接用当前用户UID作为节点键,跳过push()生成随机ID的步骤
refDataInstance.child(FirebaseAuth.instance.currentUser!.uid).set({
  "email": FirebaseAuth.instance.currentUser?.email,
  "uid": FirebaseAuth.instance.currentUser?.uid,
  "password": _passwordController.text,
  "type": "trainers",
  "status": "Unavailable",
});

检索用户详情的代码

直接通过UID定位节点读取数据即可:

final userRef = FirebaseDatabase.instance.ref().child("users/${FirebaseAuth.instance.currentUser!.uid}");
userRef.once().then((snapshot) {
  if (snapshot.exists) {
    Map<String, dynamic> userData = snapshot.value as Map<String, dynamic>;
    String email = userData["email"];
    String status = userData["status"];
    String type = userData["type"];
    // 后续处理用户数据逻辑
  }
});

若坚持原有结构,用orderByKey()检索的方法

如果不想调整数据结构,要通过orderByKey()找到对应UID的节点,需要遍历所有push节点下的子节点,性能很差,仅作参考:

final usersRef = FirebaseDatabase.instance.ref().child("users");
usersRef.once().then((snapshot) {
  if (snapshot.exists) {
    Map<String, dynamic> pushNodes = snapshot.value as Map<String, dynamic>;
    // 遍历每个push生成的节点
    pushNodes.forEach((pushId, value) {
      DatabaseReference userNodeRef = usersRef.child(pushId);
      // 按节点key(即用户UID)匹配查询
      userNodeRef.orderByKey().equalTo(FirebaseAuth.instance.currentUser!.uid).once().then((userSnapshot) {
        if (userSnapshot.exists) {
          Map<String, dynamic> userData = userSnapshot.value as Map<String, dynamic>;
          // 拿到用户详情后的处理逻辑
        }
      });
    });
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:50:23