从 Firebase 实时数据库中的列表中获取一些(而不是全部)属性
Fetch some (and not all) properties from a list in Firebase Realtime Database
假设我的实时数据库中有一个列表,它在位置 userList 处有一个用户列表:
user1: { age: 20, name: john }
user2 : { age: 40, name: sam }
user3: { age: 30, name: cynthia }
有没有办法让我编写一个查询来仅从上面的 userList 中获取年龄?
我目前正在使用 Angular 11,并借助 Angular Fire 包与 Firebase 数据库进行通信。
注意:为了清楚起见,我已经从上面的示例中删除了撇号。
没有直接的方法。您将必须获取完整的节点,然后手动使用 Javascript 对其进行排序。但是如果你只想获取一个字段,那么你可以尝试这个函数,它对每个用户的年龄进行单独请求:
async function getAges() {
const dbRef = firebase.database().ref("users")
const requests = []
const users = ["user1", "user2", "user3"]
for (const user of users) {
requests.push(dbRef.child(user).child("age").once("value"))
}
const snapshots = await Promise.all(requests)
console.log(snapshots.map(snap => `${snap.ref.parent.key} -> ${snap.val()}`))
}
控制台的输出应该是这样的:
尽管您需要所有节点的密钥,即所有用户的 UID。如果您只将 UID 存储在某处,那么此方法将很有用,可以获取获取完整用户节点所需的密钥。
假设我的实时数据库中有一个列表,它在位置 userList 处有一个用户列表:
user1: { age: 20, name: john }
user2 : { age: 40, name: sam }
user3: { age: 30, name: cynthia }
有没有办法让我编写一个查询来仅从上面的 userList 中获取年龄?
我目前正在使用 Angular 11,并借助 Angular Fire 包与 Firebase 数据库进行通信。
注意:为了清楚起见,我已经从上面的示例中删除了撇号。
没有直接的方法。您将必须获取完整的节点,然后手动使用 Javascript 对其进行排序。但是如果你只想获取一个字段,那么你可以尝试这个函数,它对每个用户的年龄进行单独请求:
async function getAges() {
const dbRef = firebase.database().ref("users")
const requests = []
const users = ["user1", "user2", "user3"]
for (const user of users) {
requests.push(dbRef.child(user).child("age").once("value"))
}
const snapshots = await Promise.all(requests)
console.log(snapshots.map(snap => `${snap.ref.parent.key} -> ${snap.val()}`))
}
控制台的输出应该是这样的:
尽管您需要所有节点的密钥,即所有用户的 UID。如果您只将 UID 存储在某处,那么此方法将很有用,可以获取获取完整用户节点所需的密钥。