我想通过对话使用Firebase对聊天进行分组。
我有下表:
Chat
- id
- from
- to
- message
- date
我想使用Firebase来实现以下SQL查询:
SELECT * FROM chat where id = 'XX' order by date
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?
答案 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客户端,数据结构和聊天安全规则。