【发布时间】:2021-04-29 21:36:50
【问题描述】:
我正在使用 react-native 和 firebase 创建一个消息传递应用程序。它工作得很好。
现在我想通过创建私人聊天更进一步。据我了解,我需要将数据填充到子集合中。例如:chats>chatroom1>data、chats>chatroom2>data e.t.c
我目前正在使用此代码
从'firebase'导入firebase;
class Fire {
constructor (props) {
this.init()
this.checkAuth()
}
init = () => {
if (!firebase.apps.length) {
}
};
checkAuth = () => {
firebase.auth().onAuthStateChanged(user => {
if (!user) {
firebase.auth().signInAnonymously();
}
})
}
send = messages => {
messages.forEach(item => {
const message = {
text: item.text,
timestamp: firebase.database.ServerValue.TIMESTAMP,
user: item.name
}
this.db.push(message)
})
}
parse = message => {
const {user, text, timestamp} = message.val();
const {key, _id} = message
const createdAt = new Date(timestamp)
return {
_id,
createdAt,
text,
user
}
}
get = callback => {
this.db.on('child_added', snapshot => callback(this.parse(snapshot)))
}
off() {
this.db.off()
}
get db() {
return firebase.database().ref("messages");
}
get uid(){
return(firebase.auth().currentUser || {}).uid
}
}
如何从这段代码中填充子集合?
我相信对于调用特定的子集合,firebase.database().ref("messages/chatroomid"); 可以解决问题,对吧?
我所说的子集合是这个
目前我的 JSON 树看起来像:
database
- messages
- mvhhsjsfurhcb
- text: "hi"
timestamp: 9942313949
user: "David"
firebase.database().ref("messages"); calls out the data under messages
这就是我想要的
database
- messages
-chatroom1
- mvhhsjsfurhcb
- text: "hi"
timestamp: 9942313949
user: "David"
-chatroom2
- mvhhsjsfurhcb
- text: "hey, this i room2"
timestamp: 9942313949
user: "Sam"
那么firebase.database().ref("messages/chatroom1"); 只呼出聊天室1 中的消息。
我打算用这个实现的是为用户创建一个私人聊天
为了让您更深入地了解,如果我要使用 PHP 来做这件事,我会做 SELECT * WHERE chatroom = :chatroom;
我相信答案将与this.db.push(message) 有关。可能添加另一个 '.' 表示在推送消息之前还有另一个分支
【问题讨论】:
-
Firebase 实时数据库没有集合的概念。相反,数据存储在一个大节点树中,也称为 JSON 树。你能澄清一下在这个上下文中你所说的“子集合”是什么意思吗?
-
但是,如果您想从拥有单个消息列表转变为拥有多个带有消息的房间,您确实会在显示的 JSON 层次结构中添加一个带有房间 ID 的层。如果您正在寻找有关如何确定房间钥匙的想法。看看stackoverflow.com/questions/33540479/…
-
@FrankvanPuffelen 谢谢,我按照您的第一条评论中的要求编辑了问题
-
这种结构看起来很适合多聊天室应用程序。对于用户之间的私人聊天,以及如何确保每个用户都能找到他们的聊天室,请参阅我之前提供的链接,因为它解决了这两个问题。
-
我理解存储用户 ID 的想法......我现在的问题是,
this.db.push(message)推送到datbase>messages>data。我如何让它推送到database>messages>chatroomid>data。我不认为链接解决了这个问题。我已经习惯了 php 作为我的后端,如果我应该知道的话,我很抱歉。 @FrankvanPuffelen
标签: javascript firebase react-native firebase-realtime-database