从节点获取特定的子节点数据(Firebase,Swift)

时间:2018-08-06 18:48:31

标签: swift firebase firebase-realtime-database

我有一个对话节点,其中包含简单的子节点(例如displayMessage和sessionName),还包含较大的子节点(例如,包含对话中发送的所有消息的信息的消息)。有没有一种方法只能观察来自特定子节点的数据,因为我想在imageUrl,name和displayMessage上获取数据,但是我不希望它在所有消息上获取数据,因为有大量的消息列表会不必要地用完很多数据。

DB Structure

1 个答案:

答案 0 :(得分:1)

虽然Firebase数据库允许您在单个分支中混合各种内容,但是如果您在单个分支中有多种实体类型,通常这是一种反模式。

在您的示例JSON中,我看到了三种主要的数据类型:

  1. 对话消息
  2. 对话的元数据
  3. 对话的成员

通常,您应该在三个单独的顶层列表中对它们进行建模,每个列表具有相同的子键(对话ID),然后为每个对话使用该类型的特定数据。

conversations
  conversation1: { conversationName: "", displayMessage: "",lastMessageTime: 1532968664.3149939 }
  conversation2: { conversationName: "", displayMessage: "" }
members
  conversation1: { ... }
  conversation2: { ... }
messages
  conversation1: { 
    "-Llg...": { ... },
    "DBC972...": { ... }
  }
  conversation2: { ... }