我有一个带有聊天室和评论的实时Firebase应用程序。评论属于一个聊天室,一个聊天室可以包含许多评论。我只想检索给定房间的评论,但是现在我只能接收所有评论。
每次保存评论时,我还将其ID保存到它所属的房间。这样,每个房间都有其注释ID的列表。我可以使用chatRooms/${id}/commentIds
检索聊天室的子注释ID列表。
// data structure is basically like this:
chatRooms: {
ROOMID123: {
title: "Room A",
commentIds: {
COMMENTIDABC: true,
COMMENTIDXYZ: true
}
}
},
comments: {
COMMENTIDABC: {
message: "some message",
parentRoomId: ROOMID123
},
COMMENTIDXYZ: {
message: "Another message",
parentRoomId: ROOMID123
}
}
我可以根据房间的ID获取给定房间的评论ID,如下所示:
firebase.database().ref(`chatRooms/${chatRoomId}/commentIds`).on('value',
snapshot => {
const commentsObject = snapshot.val();
const commentIdsList = Object.keys(commentsObject);
});
对我来说会更好
a)使用该commentIds列表仅检索给定房间的评论?如果是这样,我应该使用什么查询?
b)使用chatRoom的ID检索具有匹配parentRoomId
的每个评论?如果是这样,尽管阅读了文档,我仍然不知道该怎么做。
谢谢!
答案 0 :(得分:2)
我建议第三个选项:将每个聊天室的评论存储在单独的父节点中。像这样:
commentsPerRoom: {
ROOMID123: {
COMMENTIDABC: {
message: "some message",
},
COMMENTIDXYZ: {
message: "Another message",
}
}
}
使用上述结构,您可以通过一次直接查找来检索特定房间的评论:
firebase.database().ref(`commentsPerRoom/${chatRoomId}`).on('value',
原因我将在您当前的数据结构中使用此数据结构: