如何从子键获取父键名?Firebase中通过amoxicillin值查询m1键
嘿,我来帮你搞定这个问题!要在Firebase里通过子节点的值找到对应的父键,核心思路就是查询匹配该值的节点,再提取它的父键,下面分两种常见的Firebase数据库类型给你讲清楚:
方法一:Firebase Realtime Database 实现方式
假设你的数据库结构大概是这样的:
{ "medications": { "m1": { "name": "amoxicillin" }, "m2": { "name": "ibuprofen" } } }
要找到name为amoxicillin的父键m1,可以按以下步骤操作:
1. 构建查询并监听结果
用orderByChild()指定要匹配的子键,再用equalTo()设置目标值,最后监听查询结果提取父键:
// 初始化Firebase(如果还没配置的话) import { initializeApp } from "firebase/app"; import { getDatabase, ref, query, orderByChild, equalTo, onValue } from "firebase/database"; const firebaseConfig = { // 替换成你的Firebase配置信息 }; const app = initializeApp(firebaseConfig); const db = getDatabase(app); // 构建查询:匹配所有name等于amoxicillin的节点 const medicationsRef = ref(db, 'medications'); const targetQuery = query(medicationsRef, orderByChild('name'), equalTo('amoxicillin')); // 监听查询结果 onValue(targetQuery, (snapshot) => { if (snapshot.exists()) { // 遍历结果(如果有多个匹配项都能拿到) snapshot.forEach((childSnapshot) => { // childSnapshot.key就是你要找的父键m1 console.log('找到的目标父键:', childSnapshot.key); // 要是只需要第一个匹配项,在这里加个break就行 }); } else { console.log('没有找到匹配的节点'); } }, (error) => { console.error('查询出错啦:', error); });
关键注意事项
- 一定要在Firebase控制台给目标节点(比如上面的
medications)设置索引规则,否则查询会失败。规则示例:{ "rules": { "medications": { ".indexOn": ["name"] } } } - 如果你的结构是直接把
amoxicillin作为子节点的值(比如m1: "amoxicillin"),那查询可以简化成:const targetQuery = query(medicationsRef, orderByValue(), equalTo('amoxicillin'));
方法二:Firebase Firestore 实现方式(如果用的是Firestore)
如果你的数据存在Firestore里,结构大概是这样:
medications (集合) ├─ m1 (文档) │ └─ name: "amoxicillin" └─ m2 (文档) └─ name: "ibuprofen"
查询代码如下:
import { initializeApp } from "firebase/app"; import { getFirestore, collection, query, where, getDocs } from "firebase/firestore"; const firebaseConfig = { // 替换成你的Firebase配置信息 }; const app = initializeApp(firebaseConfig); const db = getFirestore(app); async function findTargetParentKey() { // 构建查询条件:匹配name等于amoxicillin的文档 const targetQuery = query(collection(db, "medications"), where("name", "==", "amoxicillin")); const querySnapshot = await getDocs(targetQuery); querySnapshot.forEach((doc) => { // doc.id就是你要找的父键(文档ID)m1 console.log('找到的目标父键:', doc.id); }); if (querySnapshot.empty) { console.log('没有找到匹配的文档'); } } // 调用查询函数 findTargetParentKey();
这样不管用的是哪种Firebase数据库,都能轻松拿到对应的父键啦~
内容的提问来源于stack exchange,提问作者Mr. Benbenbenbenben
相关产品推荐
相关产品推荐

