You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从子键获取父键名?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:13:00