我有一个对话节点,其中包含简单的子节点(例如displayMessage和sessionName),还包含较大的子节点(例如,包含对话中发送的所有消息的信息的消息)。有没有一种方法只能观察来自特定子节点的数据,因为我想在imageUrl,name和displayMessage上获取数据,但是我不希望它在所有消息上获取数据,因为有大量的消息列表会不必要地用完很多数据。
答案 0 :(得分:1)
虽然Firebase数据库允许您在单个分支中混合各种内容,但是如果您在单个分支中有多种实体类型,通常这是一种反模式。
在您的示例JSON中,我看到了三种主要的数据类型:
通常,您应该在三个单独的顶层列表中对它们进行建模,每个列表具有相同的子键(对话ID),然后为每个对话使用该类型的特定数据。
conversations
conversation1: { conversationName: "", displayMessage: "",lastMessageTime: 1532968664.3149939 }
conversation2: { conversationName: "", displayMessage: "" }
members
conversation1: { ... }
conversation2: { ... }
messages
conversation1: {
"-Llg...": { ... },
"DBC972...": { ... }
}
conversation2: { ... }