firebase - 更新 Firebase 实时数据库对象中的特定值

标签 firebase flutter dart firebase-realtime-database

我正在使用 Firebase 学习 Flutter。我在 Firebase 实时数据库中有一些虚拟数据:

{
  "postsnode": {
    "posts": [
      {
        "postId": "u1",
        "postName": "p1"
      }
    ]
  },

  "usersnode": {
    "users": [
      {
        "userId": "u1",
        "userName": "bla bla 1"
      },
       {
        "userId": "u2",
        "userName": "bla bla 2"
      }
    ]
  }
}

控制台数据库结构截图为:

enter image description here

我已成功对我的 usersnode 对象执行查询以获取特定用户:

void queryDB(BuildContext context) async {
    AppUtil.showLoader(context: context);
    FirebaseDatabase.instance.ref().child('usersnode/users').orderByChild('userId').equalTo("u1").get().then((snapshot) {
      if (snapshot.exists) {
        print("user:::" + snapshot.value.toString());
        final jsonResponse = json.encode(snapshot.value);
        List<dynamic> list = json.decode(jsonResponse);

        List<Users> users = [];
        list.forEach((element) {
          Users usersModel = Users.fromJson(element);
          users.add(usersModel);
        });

        users.forEach((element) {
          debugPrint("UseX:::" + element.userName);
        });
      } else {
        print('No data available.1');
      }
      AppUtil.dismissLoader(context: context);
      // }).onError((error, stackTrace) {
      //   print('No data available.2');
      //   AppUtil.dismissLoader(context: context);
    });
  }

我只想更新我的特定对象,假设用户对象仅具有userId=u1! 有人可以帮我得到这个,使用查询更新!或者我做错了!

实际上我只是想根据某些条件更新对象:

更新用户 -> 其中 userId=u1

提前致谢!

最佳答案

欢迎使用 Flutter Firebase!

首先,您可能应该更改数据结构。无需为用户提供随机增量 ID。您可以使用它们的唯一 ID 作为对象的键:

{
  "posts": {}
  ...
  "users": {
    "u1": {
      "userName": "bla bla 1"
    },
    "u2": {
      "userName": "bla bla 2"
    }
  }
}

然后,你可以这样做:

final String userId = 'u1'; 
final userDoc = FirebaseDatabase.instance.reference().child('users/$userId');

如果您计划在 postsusers 中存储大量数据,我强烈建议您检查 Cloud Firestore 。它提供了更好的结构和更高级的数据类型。

关于firebase - 更新 Firebase 实时数据库对象中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72262624/

相关文章:

flutter - 如何在 Flutter 中为 CircleAvatar 赋予多种边框颜色?

android - Flutter:如何在两个单独的android应用之间安全地共享数据?

android - Firebase Android 排行榜系统

firebase - flutter/火力基地 : Admin features in-app or cloud functions?

reactjs - 无法使用 Firebase v9 Modular React JS 读取未定义的属性(读取 'indexOf')

flutter - ImageSource.Gallery 上带有抖动的图像选择器的错误

flutter - 如何将两个列表合并为一个具有特定顺序的列表?

android - 聚焦 ListView 的底部? flutter

dart - 从另一个文件调用对象

firebase - 将 SearchField 添加到从 Firestore 读取的 StreamBuilder