3

Firebase を使用して、会話ごとにチャットをグループ化したいと考えています。

次の表があります。

Chat
- id
- from
- to
- message
- date

Firebase を使用して、次の SQL クエリを実装したいと考えています。

  1. SELECT * FROM chat where id = 'XX' order by date

  2. SELECT * FROM chat GROUP BY id ORDER BY date

Firebase を使用してこれを行うにはどうすればよいですか?

#1を行うには、次のことができると考えています:

var chatMessagesRef = new Firebase(‘MY.firebaseio.com/chat_messages/chat_id’);
chatMessagesRef.on(‘child_added’, function(snap) {
  console.log( snap.val() );
});

しかし、どうすれば#2を行うことができますか?また、日付の順序でどのように#1を行うことができますか?

4

1 に答える 1

2

別々の部屋に編成されたチャットやチャットの会話については、構造を次のように変更することを検討してください。

/chat_messages/<room-id>/<message-id>/<message-data>

この構造を使用すると、選択した特定の名前を使用して新しいルーム/会話 ID を作成するか、.push(). この部屋に新しいメッセージを書きたいときはいつでも、次の操作を行います。

var chatMessagesRef = new Firebase('<YOUR-FIREBASE>.firebaseio.com/chat_messages');
function sendMessage(roomId, message) {
  chatMessagesRef.child(roomId).push(message);
}

Firebase には基本的に、パスによるクエリと優先度によるクエリの 2 つの方法があります (詳細については、「Firebase ブログ: データの非正規化は正常です」を参照してください)。Firebase プッシュ ID は自動的に生成されて時系列順に並べ替えnられるため、任意の会話の最新のメッセージを取得できます。次のlimit()ようなクエリを使用します。

chatMessagesRef.child(roomId).limit(20).on('child_added', function(snapshot) { ... });

limit()または、上記のステートメントのクエリを削除することで、会話のすべてのメッセージを取得し、自動的に時系列順に並べ替えることができます。

まだ行っていない場合は、Firebase の公式オープンソース チャット クライアントであるFirechatをチェックしてください。これには、完全に文書化された JavaScript クライアント、データ構造、およびチャット用のセキュリティ ルールが含まれています。

于 2013-07-15T21:21:16.387 に答える