【发布时间】:2017-12-26 14:51:47
【问题描述】:
我在使用 Firebase 时遇到了一些问题。我想要做的是创建一个新的聊天室,如果它不存在,否则,获取现有的聊天室 ID。到目前为止,我取得的成就是:
数据库结构如下:
chatrooms
chatroomID
participantID1 *(can be senderKey or recipientKey)*
participantID2 *(can be senderKey or recipientKey)*
latestMessage
我创建新聊天室的代码:
let promiseRoomKey = new Promise((resolve, reject) => {
// need to perform check before insert new chatroom
// create room for chat
var roomKey = firebase.database().ref('chatrooms').push({
[senderKey]: true,
[recipientKey] : true
}).getKey();
resolve(roomKey);
});
问题是在我创建新聊天室之前,我需要检查 senderKey 和 recipientKey 是否都存在于同一个聊天室中。如果他们两个都出现在同一个聊天室中,我会抓取聊天室 ID。如果没有,那么我将继续创建一个新的聊天室。
但我不知道如何实际检查 senderKey 和 recipientKey 是否出现在同一个聊天室中。有什么想法吗?
附言。现在请忽略 latestMessage 节点,因为它只是为了简化我的阅读目的。
谢谢!
【问题讨论】:
-
使用 firebase 事务,您可以在继续操作之前检查数据库中的当前值。见firebase.google.com/docs/database/web/…
-
通常当您想要确保一个值或值组合是唯一的时,请查看是否可以将该值/那些值放入键中。由于保证密钥在其集合中是唯一的,因此您的一半问题会自动解决。在这种情况下,您可以根据该房间参与者的 ID 确定聊天室 ID。见stackoverflow.com/questions/33540479/…
-
@FrankvanPuffelen 我明白了。但是我怎样才能真正将连接的字符串作为聊天室ID 推送呢?因为通过在firebase中使用push(),它会自动生成一个唯一的push ID,对吗?此外,通过将参与者 ID 连接为聊天室 ID,是连接他们唯一的推送帐户 ID 还是仅连接用户名本身更好?
-
不要调用
ref.push(...),而是使用ref.child(key).set(...)。
标签: javascript firebase firebase-realtime-database