【问题标题】:Firebase one to one chat with AngularFirebase 与 Angular 一对一聊天
【发布时间】:2017-11-06 13:26:06
【问题描述】:

我想进行一对一的聊天。每个用户都可以联系另一个用户。

Json 结构为:

{
  "messages" :
       "user1UID_user2UID" : {
             auto generated ID : {
                      "text" : "hello",
                      "timestamp" : 192564646546,
                      "name" : "user1"
             },
             auto generated ID : {
                      "text" : "hi",
                      "timestamp" : 192564646554,
                      "name" : "user2"
             }
         }
}

当用户 1 连接到应用程序时,他可以看到他参与的每个对话的列表。 假设他发起了与用户 2 的对话,用户 3 也与他进行了对话。

所以我们会有以下孩子:

user1UID_user2UID

user3UID_user1UID

如何将 User1 参与的所有对话检索到?

constructor(db: AngularFireDatabase) {
    this.messages= db.list('/messages/' + user1UID + "_" + user2UID); //but I don't know user2UID at this moment
}

我可以制作一个正则表达式,还是每次与他有关时我都必须将对话密钥(某处)存储?

或者我完全错了,我没有以正确的方式看待问题?

【问题讨论】:

    标签: firebase firebase-realtime-database angularfire2 nosql


    【解决方案1】:

    您用于聊天室的关键命名架构是我在此处回答的变体:http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase。这是一个变体,因为您似乎没有按字典顺序对 UID 进行排序,我建议这样做。

    我提出的算法所做的只是为特定用户之间的聊天室生成一个可重复的、唯一的、幂等的密钥。虽然这些对于数据模型来说是非常重要的属性,但它们并不能神奇地解决其他用例。

    与 NoSQL 数据建模中的常见情况一样,您必须对数据进行建模以适应您想要的用例。因此,如果您的应用要求您为每个用户显示聊天室列表,那么您应该在数据模型中包含每个用户的聊天室列表:

    userChatRooms
      user1UID
        user1UID_user2UID
        user1UID_user3UID
      user2UID
        user1UID_user2UID
        user1UID_user3UID
      user3UID
        user1UID_user3UID
    

    现在获取用户的聊天室列表就像阅读 /userChatRooms/$uid 一样简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 2018-03-07
      相关资源
      最近更新 更多