繁体   English   中英

如何根据子值从 Firebase 实时数据库中检索数据

[英]How to retrieve data from firebase realtime database based on child value

嗨,我对 Firebase 实时数据库很陌生,这是我的第一个项目。 对不起,如果这是一个愚蠢的问题。

我按如下方式保存我的数据。

firebase 数据库结构:

图片

现在我想使用 student_id 变量检索学生参与的所有家长聊天 ID。

我尝试按照这个SO question和这个结构数据库检索数据文档,但它没有检索值。 有人有想法吗?

我建议将您的学生所在的聊天室 ID 保存在单独的位置。 例如:

Path:
“/users/$uid/chatrooms”
Data:
{
0: 350,
1: 423
}

因此,您可以在获取聊天室数据之前先检索聊天室 ID。

import { initializeApp } from “firebase”;
 import { getDatabase, get, set, ref } from “firebase/database”;


const userChatroomIdsRef = ref(db, ‘/users/${uid}/chatrooms‘);
get(userChatroomIdsRef).then(result => {
const chatroomIds = result.val();
if (!(chatroomIds && chatroomIds instanceof Array)) return; // firebase will return null if its an empty array. 
const getChatroomInfoPromises = chatroomIds.map(id => get(ref(db, ‘/chat/${id}/${uid}’)).then(result => result.val());
Promise.all(getChatroomInfoPromises).then(chatroomInfoArray => { YOUR LOGIC HERE });
});

从聊天室中删除/添加学生现在变得很简单,因为您只需更改聊天室 ID 的数组即可。

const userChatroomIdsRef = ref(db, ‘/users/${uid}/chatrooms‘);
get(userChatroomIdsRef).then(result => {
const oldIds = result.val();
const newChatroomIds = oldIds.filter(id => id !== ID TO DELETE);
return set(userChatroomIdsRef, newChatroomIds)
});

这当然是假设你知道你的 student_id 的 uid。 如果您不知道每个 student_id 有什么 uid,则必须存储一个引用。 我建议将所有学生信息保存在“/users/$uid/”目录中。 您可以在此处保存 studentId,以便以编程方式使用它。

在所有其他 firebase 逻辑中,我会尝试使用本机 firebase uid 进行查询。 这将使您的生活更轻松。

将信息组织在数据库中总是好的,这样您的逻辑就很简单。

请检查我的代码是否有语法错误; 这是我在 iPhone 上写的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM