如何访问Firebase路径中含Push ID的动态生成引用内的子节点?
解决Firebase中带Push ID路径的数据库引用问题
嘿,我来帮你搞定这个Firebase数据库引用的问题!首先得理清你的数据结构——看起来你的spaces节点下面直接是Firebase生成的Push ID子节点,然后才是depts,所以直接用spacesRef.child('depts')肯定找不到,因为中间缺了那层Push ID的节点。
情况1:你已经知道目标Push ID(比如L3s_dBCdKN4EyRJAi)
如果已经明确要访问的Push ID,直接在引用里补上这一层就行:
export const firebaseApp = Firebase.initializeApp(config); export const db = firebaseApp.database(); export const spacesRef = db.ref('spaces'); // 补上已知的Push ID节点 const targetPushId = 'L3s_dBCdKN4EyRJAi'; export const deptsRef = spacesRef.child(targetPushId).child('depts'); // 如果要直接访问"Cooking area"节点,可以继续链式调用 export const cookingAreaRef = deptsRef.child('dept1/Cooking area');
这样deptsRef就能正确指向Push ID节点下的depts了,后续操作这个引用就没问题。
情况2:不知道Push ID,需要动态查询获取
如果不知道具体的Push ID,但这个节点有唯一标识(比如某个属性值),可以通过Firebase的查询来定位它:
export const firebaseApp = Firebase.initializeApp(config); export const db = firebaseApp.database(); export const spacesRef = db.ref('spaces'); // 假设你的Push ID节点有一个唯一属性,比如"spaceName": "Main Kitchen" spacesRef.orderByChild('spaceName').equalTo('Main Kitchen').once('value') .then(snapshot => { // 遍历查询结果(因为可能有多个匹配,这里假设唯一) snapshot.forEach(childSnapshot => { const targetPushId = childSnapshot.key; // 拿到Push ID const deptsRef = spacesRef.child(targetPushId).child('depts'); // 现在可以访问dept1下的"Cooking area"了 deptsRef.child('dept1/Cooking area').once('value') .then(cookingSnapshot => { const cookingAreaData = cookingSnapshot.val(); console.log('Cooking area数据:', cookingAreaData); }); }); }) .catch(err => { console.error('查询Push ID出错:', err); });
小建议
如果这个Push ID是你之前用spacesRef.push()生成的,最好在创建节点的时候就把这个Push ID保存到本地存储或者数据库的其他位置(比如用户的关联节点),这样后续直接读取使用就行,不用每次都查询,效率会更高。
内容的提问来源于stack exchange,提问作者Joao Alves Marrucho
相关产品推荐
相关产品推荐

