如何在未知随机Key时访问Firebase实时数据库的alumnos节点?
解决Firebase实时数据库未知随机Key访问alumnos节点的问题
嗨,我来帮你搞定这个Firebase的问题~你遇到的核心问题是用push()生成了随机Key的grupos子节点,现在没法直接定位到里面的alumnos,其实有几个简单的办法可以解决:
方法一:直接遍历所有grupos节点获取alumnos
Firebase的列表查询可以直接获取grupos下的所有子节点,不需要知道每个子节点的随机Key。你可以修改getAlumnos方法,直接监听grupos路径:
public getAlumnos(practica) { // 直接获取该practica下所有grupo节点,每个节点都包含alumnos return this.afDB.list('practicas/' + practica.id + '/grupos/').valueChanges(); }
调用这个方法后,你会得到一个数组,数组里的每个元素就是一个包含alumnos的grupo对象。之后你可以遍历这个数组,取出每个grupo里的alumnos数据就行。
方法二:保存push生成的随机Key(推荐)
如果你需要后续单独访问某个特定的grupo,那在创建grupo的时候就把Firebase生成的Key保存下来是更稳妥的方式。修改你的anyadirGrupos方法:
public anyadirGrupos(practica){ // push方法会返回一个引用,里面包含自动生成的Key const newGrupoRef = this.afDB.database.ref('practicas/' + practica.id + '/grupos/').push(practica.grupo); const grupoKey = newGrupoRef.key; // 你可以把这个Key存在practica对象里,方便后续页面跳转或查询使用 practica.grupoKey = grupoKey; // 也可以把Key存回这个grupo节点本身,方便后续查询关联 newGrupoRef.update({ key: grupoKey }); }
这样之后,你就可以用保存的grupoKey直接访问对应的alumnos了:practicas/${practica.id}/grupos/${grupoKey}/alumnos
注意:你原来的getAlumnos写法有问题
你之前用../alumnos/的相对路径写法在Firebase里是不生效的,Firebase的数据库路径是绝对路径,不支持这种相对跳转的写法,所以那个方法肯定拿不到数据,换成上面两种方式就可以啦。
如果你的需求是获取某个practica下所有的alumnos(不管属于哪个grupo),还可以在拿到所有grupo数组后,用数组方法把每个grupo的alumnos合并成一个大数组,比如:
// 假设已经通过getAlumnos拿到了grupos数组 const allAlumnos = grupos.flatMap(grupo => grupo.alumnos);
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

