使用Firebase按对话分组聊天

时间:2013-07-12 16:27:08

标签: ios firebase

我想通过对话使用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

  3. 如何使用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?

1 个答案:

答案 0 :(得分:2)

对于组织到单独房间或聊天对话中的聊天,请考虑将您的结构修改为以下内容:

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

使用此结构,您可以使用您选择的特定名称或使用.push()的Firebase生成的名称来创建新的会议室/会话ID。每当您想要向此房间写新消息时,请执行以下操作:

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

Firebase本质上有两种查询数据的方式:按路径和优先级(有关详细信息,请参阅Firebase Blog: Denormalizing Your Data is Normal。自动生成Firebase推送ID以按时间顺序排序,因此您最多可以获取n最近使用limit()查询进行对话的消息,例如:

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

或者,您可以通过删除上述语句中的limit()查询来获取对话的所有消息,并按时间顺序自动排序。

如果您还没有,请查看Firechat,这是Firebase的官方开源聊天客户端,并包含完整记录的JavaScript客户端,数据结构和聊天安全规则。