我正在使用react-native构建应用程序。我想按chatList
值按降序排序createdAt
。
这是我的结构:
{
"chatList": {
"L3RDhCUvTVBk--KKgCl" : {
"lastMessage": {
"createdAt": 1516638900725
}
},
"L3RDhCUvTVBk--KKgC1" : {
"lastMessage": {
"createdAt": 1516638920725
}
}
}
}
另外,我是否需要索引此结构?
答案 0 :(得分:1)
如果您的上一条消息始终位于聊天下的lastMessage/createdAt
,(例如/chatList/*/lastMessage/createdAt
),那么您可以通过以下方式查询聊天列表:
firebase.database.reference("chatList").orderByChild("lastMessage/createdAt")
但是你不能按降序排列。因此,您要么必须在客户端中反转结果,要么存储倒置的时间戳。有关详情,请参阅我的回答:firebase -> date order reverse
如果lastMessage
实际上是动态的(chatList
下的每个孩子都不同),那么很遗憾,您无法从当前结构中获取结果,并且您需要将数据扩充到允许查询。
如果您想获得按其上次更新日期排序的聊天列表,那么您需要在数据库中准确存储该聊天:聊天列表及其上次更新日期。
{
"chatUpdates": {
"L3RDhCUvTVBk--KKgCl": 1516638900725
"L3RDhCUvTVBk--KKgC1": 1516638920725
}
}
这是一个附加数据结构,纯粹是为了允许您的用例。现在,您需要在添加邮件时同时更新chatList
和chatUpdates
。要详细了解有效的方法,请参阅How to write denormalized data in Firebase
一些相关问题: