2017-06-05 2 views
1

チャットをしたいです。各ユーザーは別のユーザーに連絡できます。ファイアーベースアングル付きチャットルーム

JSON構造は次のようになります。

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

user1がアプリに接続すると、彼は彼が一部であるすべての会話のリストを見ることができます。 彼はユーザー2との会話を開始し、ユーザー3も彼と会話していたとしましょう。

だから我々は、以下の子だろう:

user1UID_user2UID

をuser3UID_user1UID

どのように私は、ユーザー1がへに関与しているすべての会話取得することができますか?

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

私はRegexを作ることができますか、それとも彼が懸念するたびに会話キー(どこか)を保存する必要がありますか?

私は完全に間違っていますし、正しい方法で問題を見ていませんか?

答えて

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と同じくらい簡単です。

関連する問題