背景:
我正在尝试使用 Firebase、Twilio 和 Node.js 通过浏览器发送短信。我当前在 Firebase 中的数据结构如下所示:
{ messages :
{ +15553485 :
{ FB-GENERATED-KEY-1 :
{ body: "hello world"
timestamp: 1461758765472 }
},
{ FB-GENERATED-KEY-3 :
{ body: "I love dogs"
timestamp: 1461758765475 }
}
}
},
{ +15550000 :
{ FB-GENERATED-KEY-2 :
{ body: "goodbye world"
timestamp: 1461758765473 }
},
{ FB-GENERATED-KEY-4 :
{ body: "I love cats"
timestamp: 1461758765476 }
}
}
}
}
当通过前端将消息添加到 Firebase 时,后端需要收到通知才能通过 Twilio 发送短信。当后端收到来自手机的回复(通过 Twilio)时,会将其添加到 Firebase。
问题:
当我侦听线程的更改时,我会收到该电话号码发送/接收的所有消息。显然后端不想再次发送所有消息,所以我只对添加到线程中的最新消息感兴趣。
另外,我似乎无法轻松获取下面有消息的电话号码(密钥)。
我尝试过的:
ref.child('messages').on('child_added', ...)
— 这适用于添加的新电话号码/messages
,但是 Firebase 不会发送新的电话号码(密钥),只会发送来自FB-GENERATED-KEY-2
down.
ref.child('messages').on('child_changed', ...)
— 这返回all线程中的消息,而不仅仅是新消息。我可以在服务器上排序并找到最新的消息,但这似乎很快就会变得很重 - 如果您发送了数千条消息怎么办?
在根级别存储消息(又名展平树)并将号码存储为属性也可以,但我需要使用电话号码作为一种索引,以便稍后与其他数据连接(例如外键)。
问题:
- 如何在监听父级活动时仅获取最新消息
/messages
而不是特定的电话号码?
- 使用时如何获取密钥(电话号码)
child_
event?
- 这个数据结构有意义吗?