Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase数据库。按记录id查找节点中的位置_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

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都不支持按索引检索项或确定项的索引。这样做的原因是这样的操作固有地限制了系统的可伸缩性,因为您必须知道(在本例中)所有视频的喜欢数,才能知道一个视频的索引/排名。