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

从节点(Firebase、Swift)获取特定子节点数据,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我有一个conversations节点,它包含直截了当的子节点,如displayMessage和conversationName,但也包含较大的子节点,如包含会话中发送的所有消息信息的消息。有没有办法只观察特定子节点的数据,因为我想获取imageUrl、name和displayMessage上的数据,但我不想让它获取所有消息上的数据,因为有一个巨大的消息列表,它会不必要地消耗大量数据 虽然Firebase数据库允许您在单个分支中混合各种内容,但如果您在单个分支中有多个实体类型,则它通常是一种反模

我有一个conversations节点,它包含直截了当的子节点,如displayMessage和conversationName,但也包含较大的子节点,如包含会话中发送的所有消息信息的消息。有没有办法只观察特定子节点的数据,因为我想获取imageUrl、name和displayMessage上的数据,但我不想让它获取所有消息上的数据,因为有一个巨大的消息列表,它会不必要地消耗大量数据


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

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

  • 对话的信息
  • 会话的元数据
  • 谈话的成员
  • 通常,您应该在三个独立的顶级列表中对它们进行建模,其中每个列表都有相同的子键(会话ID),然后每个会话都有该类型的特定数据

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