2016-11-16 53 views
0

在我的Firebase数据库中,我使用复合键作为以按照字典顺序排列的以下格式“UID1_UID2”中的一对一对话的ID。Firebase iOS - 使用复合键的一部分查询

当我想通过iOS客户端为特定用户(UID1)加载所有对话时,如何在复合键由两个组合用户ID组成的情况下查询Firebase。

回答

0
queryStartingAt("UID1_").queryEndingAt("UID1_") 

将返回所有对话UID1_开始。

您应该构建您的数据

conversation: UID1_UID2 
0

复合键都没有很大的想法。请参考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": { ... } 
    } 
} 
+0

我看到这个然后我读这http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-c​​hannels在一对一的结构方面。看起来我需要为你的方法添加一个索引来访问用户所属的聊天记录,所以会尝试这种方法。 – jeh

+0

复合键的问题在于它们 - 在设计上 - 非常有限。即:A <> B!= B <> A,并且它们不会扩展到两个参与者之外,如果在某个时候您偶然发现需要它。当然,他们务实,并会让你更快开始,但我不建议像这样限制自己 – pkluz

相关问题