在我的Firebase数据库中,我使用复合键作为以按照字典顺序排列的以下格式“UID1_UID2”中的一对一对话的ID。Firebase iOS - 使用复合键的一部分查询
当我想通过iOS客户端为特定用户(UID1)加载所有对话时,如何在复合键由两个组合用户ID组成的情况下查询Firebase。
在我的Firebase数据库中,我使用复合键作为以按照字典顺序排列的以下格式“UID1_UID2”中的一对一对话的ID。Firebase iOS - 使用复合键的一部分查询
当我想通过iOS客户端为特定用户(UID1)加载所有对话时,如何在复合键由两个组合用户ID组成的情况下查询Firebase。
queryStartingAt("UID1_").queryEndingAt("UID1_")
将返回所有对话UID1_开始。
您应该构建您的数据
conversation: UID1_UID2
复合键都没有很大的想法。请参考this part of the documentation,它解释了如何最佳建模聊天/对话结构。
相关摘录演示了如何构造数据,聊天记录:
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// conversation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
我看到这个然后我读这http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels在一对一的结构方面。看起来我需要为你的方法添加一个索引来访问用户所属的聊天记录,所以会尝试这种方法。 – jeh
复合键的问题在于它们 - 在设计上 - 非常有限。即:A <> B!= B <> A,并且它们不会扩展到两个参与者之外,如果在某个时候您偶然发现需要它。当然,他们务实,并会让你更快开始,但我不建议像这样限制自己 – pkluz