Firebase数据库。按记录id查找节点中的位置
在我的应用程序中,我有一些视频,用户可以喜欢。视频元数据保存在节点“视频”中,如下所示:Firebase数据库。按记录id查找节点中的位置,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,在我的应用程序中,我有一些视频,用户可以喜欢。视频元数据保存在节点“视频”中,如下所示: videos: { xxxxx: { name: "Funny video", likes: 255, .... } } 我还有一个节点“userVideos”,只有视频ID userVideos: { xxxxx: true, yyyyy: true, } 在UI中,我想显示视频的排名。例如,我有5个视频:v01有5个喜欢
videos: {
xxxxx: {
name: "Funny video",
likes: 255,
....
}
}
我还有一个节点“userVideos”,只有视频ID
userVideos: {
xxxxx: true,
yyyyy: true,
}
在UI中,我想显示视频的排名。例如,我有5个视频:v01有5个喜欢,v02-10,v03-1,v04-100,v05-3
因此,当我从userVideos获取id为“v03”的视频时,我应该知道他的排名是5(因为如果我获取orderBy DESC my videos节点的视频列表,v03的位置是5)
我认为云函数应该计算这个排名。
我的下一个问题是:我是否有可能按键获取排序节点中的位置?实时数据库查询无法告诉您排序查询中子快照的位置。你必须自己编写代码来维护这些数据。就像Doug说的,你无法在排序的查询中找到孩子的位置,但你可以做的只是按视频视图或视频类排序,这应该可以按排名排序这些视频,您可以有不同的视频类别,只需按视图或类似项对每个类别进行排序。它应按所有视频进行全球排名。据我所知,firebase云存储也不支持“indexOf()”这是正确的:firebase实时数据库、firebase云存储和cloud Firestore都不支持按索引检索项或确定项的索引。这样做的原因是这样的操作固有地限制了系统的可伸缩性,因为您必须知道(在本例中)所有视频的喜欢数,才能知道一个视频的索引/排名。