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
Javascript 访问未知的Firebase路径_Javascript_Firebase_Ionic Framework_Firebase Realtime Database - Fatal编程技术网

Javascript 访问未知的Firebase路径

Javascript 访问未知的Firebase路径,javascript,firebase,ionic-framework,firebase-realtime-database,Javascript,Firebase,Ionic Framework,Firebase Realtime Database,首先,如果您检查Firebase实时数据库映像,将更容易: 因此,我用代码创建了一些id为(本例中为152648)的“实践”,然后在该对象内创建了一个“grupos”(组)列表。问题来了,为了做到这一点,我使用了.push(),因此Firebase在Firebase主节点内创建了一个列表,但问题是它使用的“键”是随机的,因此,我想访问最后一个名为“alumnos”的步骤,但由于我不知道前一个键,因此无法访问该步骤。我尝试使用一个ID来推送对象,但它先添加ID,然后添加键 我的代码: //don

首先,如果您检查Firebase实时数据库映像,将更容易:

因此,我用代码创建了一些id为(本例中为152648)的“实践”,然后在该对象内创建了一个“grupos”(组)列表。问题来了,为了做到这一点,我使用了.push(),因此Firebase在Firebase主节点内创建了一个列表,但问题是它使用的“键”是随机的,因此,我想访问最后一个名为“alumnos”的步骤,但由于我不知道前一个键,因此无法访问该步骤。我尝试使用一个ID来推送对象,但它先添加ID,然后添加键

我的代码:

//don't take care about what is values[], grupoList[] and so on
//I just take values from a checkbox on the HTML and I send them to the 'grupo' value of the object 'practica'
addGroup(){
 let y=0;
 for(let i=0; i<this.values.length; i++){
   if(this.values[i] == true){
     this.grupoList[y] = this.profiles[i];
     y++;
   }
 }
 this.grupo.alumnos = this.grupoList;
 this.practica.grupo = this.grupo;
 this.practicaService.anyadirGrupos(this.practica);
 this.navCtrl.setRoot(VerGruposPage, {'data': this.practica});
}
//Here is where I work with firebase adding the 'grupo'
public anyadirGrupos(practica){
    this.afDB.database.ref('practicas/' + practica.id + '/grupos/').push(practica.grupo);
}

//to access the node 'alumnos' (it doesn't work)
public getAlumnos(practica){
    return this.afDB.list('practicas/' + practica.id +'/grupos/' + '../alumnos/')
}

想不想在不知道前一步的情况下进入最后一步吗?

您可以有两种不同的方法:

1/在不使用额外键的情况下写入“sub-grupos”

这意味着具有如下数据库结构:

- practicas
   -idPracticas
     -grupos
        -alumnos
           -0 ....
           -1 ......
        -anotherGroupName
           -0 ....
           -1 ......
为此,应使用
set()
而不是
push()

2/在不同的子节点上保持结构和循环

db.ref('practicas/' + practica.id + '/grupos/').orderByKey().once('value').then(function(snapshot) {
    console.log(snapshot.val());
    snapshot.forEach(function(childSnapshot) {
            console.log(childSnapshot.val());
            console.log(childSnapshot.val().alumnos[0]);    
            console.log(childSnapshot.val().alumnos[1]);    
        });
  });

使用set()的问题是,如果我添加另一个组,它将覆盖现有的组,我想为每个“练习”创建一些组。我不太了解#2,但会尝试一下哈哈哈你好Eric,你有时间看看建议的解决方案吗?我不太了解#2,但我想我找到了一种方法,把所有的东西都拿出来,使用for循环#2实际上就是循环解决方案,所以我想它应该和你做的类似。