我使用Firebase构建react-native聊天室功能。我想根据另一个集合中的lastMessage createdAt值对chatList进行排序。
以下是我当前结构聊天的示例结构:
{
Chatrooms: {
CHAT_ID_1: {
messages: [...],
metadata: {
lastMessages: {
createdAt: 1515857717832 //the time
},
users: [USER_ID_1, USER_ID_2]
}
},
CHAT_ID_2: {
messages: [...],
metadata: {
lastMessages: {
createdAt: 1515857717834 //the time
},
users: [USER_ID_1, USER_ID_3]
}
}
},
Users: {
USER_ID_1: {
chatList: {
USER_ID_3: CHAT_ID_2,
USER_ID_2: CHAT_ID_1,
}
}
}
}
由于CHAT_ID_2具有最新创建的lastMessage,因此它应该是USER_ID_1的chatList中的第一个。
我想知道如何对此进行排序。
答案 0 :(得分:0)
从我看到的情况来看,无法通过上次更新时间戳来查找特定用户的聊天室。
我可以很快想到的解决方案:
我希望第一个解决方案是不言自明的。虽然它确实需要一些额外的代码,但它实际上比大多数开发人员认为的更有效,因为calls from the client to the database are pipelined over the same connection。
第二种解决方案是向/Users/$uid/$chatroomid
添加其他数据以适合您的用例。例如:
Users: {
USER_ID_1: {
chatList: {
CHAT_ID_2: 1515857717834
CHAT_ID_1: 1515857717832
}
}
}
使用此结构,您可以按照最新更新的顺序进行聊天:
firebase.database().ref("Users/USER_ID_1/chatList").orderByValue()
但在这种情况下,我会自己选择选项1。由于每个用户的聊天室数量可能相当小,而且负载不需要查询,因此可能会很好地执行和扩展。