如何遍历此数据库并获取子值?

sky*_*e33 8 javascript firebase firebase-realtime-database

我有这个数据库,看起来像这样 在此输入图像描述

所以第一个键是用户uid取自auth,然后他/她提供的用户名以及他们为每场比赛得分的内容也被采取..

我只是希望得到每个用户的总分 - 例如Ray总分为45分,而Wood总分为44分,但在查看了文档之后,我能够做的只是一个用户,我必须编写每个用户名和每条线的具体匹配得到的价值..现在想想如果他们是几十个用户会是怎样的?嗯很多线..

这是JSON

javascript代码

var query = firebase.database().ref();
 query.once("value")
 .then(function(snapshot) {
 snapshot.forEach(function(childSnapshot) {

  var key = childSnapshot.key;      
  var Data1 = childSnapshot.child("Ray/Match1/Points").val();
  var Data2 = childSnapshot.child("Ray/Match2/Points").val();
  console.log(Data1 + Data2);
  });
 })
Run Code Online (Sandbox Code Playgroud)

这将让我显示,雷总分,但不是伍德显然我必须重复它并写它..

那么我该如何解决这个问题呢?

Moh*_*ham 5

只需将节点添加到您的数据库

|_Id
   |_ $userId:
   |       |_ Ray
   |       |    |_ Match1:24
   |       |    |_ Match2:21
   |       |_ total:45
Run Code Online (Sandbox Code Playgroud)

然后得到用户的总数

var query = firebase.database().ref();
 query.once("value")
 .then(function(snapshot) {
 snapshot.forEach(function(childSnapshot) {
  var total = childSnapshot.child("total").val();
  console.log(total);
  });
 })
Run Code Online (Sandbox Code Playgroud)

您可以使用云功能添加总节点


小智 5

我看了你的问题,我认为我有你的解决方案,或者至少是你解决方案的途径.好的,首先我将解释基本问题,然后我将尝试为您提供一些泛型代码(我将尝试使用您使用的一些变量).我们走吧!

基本上我看到的是两步......

第1步 - 您需要使用"构造函数",它将创建具有自己的名称(和/或用户ID)以及它们自己的属性集的新用户对象.

通过这种思路,您可以使构造函数包含诸如"用户名","匹配点1","匹配点2"之类的属性,然后是控制台记录每个名称的摘要及其匹配总点数的函数第1点和第2点.

第2步 - 您需要将构造函数放在循环中,该循环将通过数据库查找您需要填充构造函数所需的属性以吐出您正在寻找的信息所需的特定属性.

所以...让我们深呼吸,因为这是很多话......让我们尝试编码.我会以一种我认为可以让您轻松插入自己的属性/变量名称的方式使用通用属性.

var user = function(name, match1, match2){
    this.name = name;
    this.match1 = match1;
    this.match2 = match2;
    this.pointTotal = function(match1, match2) {
        console.log(match1 + match2);};
    this.summary = function(){
            console.log(name + " has a total of " + pointTotal + " 
points.");};
}
Run Code Online (Sandbox Code Playgroud)

代码的"This"部分允许使用任何用户名,而不仅仅是特定的用户名.

好的,所以上面的代码处理问题的构造函数部分.现在,您需要使用唯一名称创建多少用户并不重要.

下一步是创建某种循环函数,该函数将遍历数据库并填写创建每个用户所需的属性,以便您可以从每个用户而不是一个用户获得总分.

再次,我将使用generic-ish属性/变量名称...

var key = childSnapshot.key;

while(i = 0; i < key.length + 1; i++) {

    var user = function(name, match1, match2){
        this.name = name;
        this.match1 = match1;
        this.match2 = match2;
        this.pointTotal = function(match1, match2) {
            console.log(match1 + match2);};
        this.summary = function(){
            console.log(name + " has a total of " + pointTotal + " points.");};
    }
}
Run Code Online (Sandbox Code Playgroud)

这是很多单词,代码是通用属性名称/变量和您使用的属性名称/变量的混合,但我确信我在正确的路径上.

我非常有信心,如果您使用我提供的代码和EXPLANATION,如果您插入自己的变量,您将获得所需的解决方案.

最后,我只是想说,我真的希望有所帮助,如果不是,我想以这种或那种方式帮助解决问题,因为我需要这种做法.我工作很奇怪,所以如果我不立即回答,我很可能在工作:(

祝你好运,我希望我帮助过!