当前位置: 首页 > 知识库问答 >
问题:

Firebase实时数据库在某个位置覆盖我的数据,即使在我使用时也是如此。push()方法

郎华皓
2023-03-14

Firebase实时数据库即使在我使用. ush()方法时也会覆盖我在某个位置的数据。我对写入Firebase实时数据库知之甚少的是,写入Firebase实时数据库可以通过几种方式完成。其中最突出的两个是

  1. set()和2。推送()方法。

长话短说,push()用于为要写入的数据创建新键,并将数据添加到节点。

很好,在我之前的项目中,Firebase一直在和我合作,但在这个项目中,我不知道发生了什么。我尝试了不同的推动和设置来实现我的目标,但到目前为止还没有进展。

在下面的代码中,我想实现两件事,只向一个位置写入一次chatUID、message和time,但分别在同一个节点“FirebaseGenerated1”下写入“-MqBBXPzUup7czdG2xCI”-

下面是一个更好的结构。

更新

这是我的代码,作者参考

_listeningMsgRef = _msgDatabase
.reference()
    .child('users')
    .child(userId)
    .child('chats')
    .child(chatUIDConcat);

当用户点击sendMessage时,以下是调用的函数

void sendMessage() {
    _messageController.clear();
    var timeSent = DateTime.now().toString();

    //Send
    Map msgMap = {
        'message': msg,
        'sender': userId,
        'time': timeSent,
        'chatUID': chatUIDConcat
    };

    //String _key = _listeningMsgRef.push().key;

    _listeningMsgRef.child(chatUIDConcat).set().whenComplete(() {
        SnackBar snackBar = const SnackBar(content: Text('Message sent'));
        ScaffoldMessenger.of(context).showSnackBar(snackBar);
        DatabaseReference push = _listeningMsgRef.child(chatUIDConcat).push().set(msgMap);
    });
}

sendMessage函数的思想是

chatUID:"L8pacdUOOohuTlifrNYC3JALQgh2+q5D38xPXVBTwmwb5Hq..."
message: "I'm coming"
newMessage: "true"
sender: "L8pacdUOOohuTlifrNYC3JALQgh2" 

完成后,将新节点推到用户节点下。

编辑:

后来我发现了这个问题。我无法实现我的目标,因为我在做那个项目时有点紧张。问题是我需要将新数据写入'-MqBBXPzUup7czdG2xCI'节点,而不覆盖其中的旧数据。

解决方案是直截了当的。我只需要确保将数据作为新节点写入该节点。没什么,谢谢弗兰克·范·帕夫伦的帮助。

共有1个答案

丌官凯康
2023-03-14

在Firebase实时数据库中写入任何数据时,会自动创建路径,在删除路径下的最后一个数据时,会将其删除。

因此,您无需首先为聊天室创建节点。相反,当您使用listeningMsgRef将第一条消息写入时,它会自动创建。儿童(chatUIDConcat)。推送()。设置(msgMap)

 类似资料:
  • 我正在使用Firebase实时数据库。例如,我有100,000个用户,他们都有不同的分数。我想做的是让所有用户的分数一次为零。我该怎么做?顺便说一句,“分数”字段的内容是“整数”。

  • 我想每天上午12:00重置Firebase实时数据库中的特定值。为此,我使用Firebase Admin SDK更改Firebase实时数据库和云函数中的数据,以便每天上午12:00触发更改。 这是我的Firebase实时数据库的示例结构: 这是我的中的代码: 部署错误: ! 函数[DailReset(us-central1)]:部署错误。 加载用户代码时函数失败。这可能是由于用户代码中的错误造成

  • 我正在尝试为一个活动构建一个票务预订应用程序,我设法完成了注册和登录部分。登录后,用户配置文件会显示出来,其中包含一些关于姓名、年龄、电子邮件等的文本视图。我想从实时数据库中读取数据并将其放入文本视图中。我不知道问题出在哪里,但文本视图不会显示数据。 用户配置文件类 用户类

  • 我是说 现在我可以得到这个房间的孩子了,但是我想知道是否有一种方法可以使用来完成同样的事情。

  • 我正在尝试在用户登录/登录其个人资料后在firebase中创建一个实时数据库。我做了身份验证火基,它向我表明用户在火库身份验证中。我尝试了很多教程,但没有任何效果。如何连接身份验证和实时数据库以生成用户配置文件。 规则: 用户类: 和UserDetails类: 我在DataSnapshot中删除了一些代码,因为它没有work.What我能做什么?我使用了很多教程,但数据库中没有编写任何内容。我想在

  • setInterval(beta,1000);} 函数beta(){ var d=document.getElementById(“opopo”).value; $(“table tbody”)。追加(“+插槽+”+“分配+”+“+日期+”+“+限制+”+“+时间+”null“);}); }