【发布时间】:2022-01-21 16:38:06
【问题描述】:
我正在尝试结交朋友系统,但在接受邀请时,我必须删除他列表中某个人的邀请,但没有密钥我无法做到。
如何在数据库中按值(在本例中为 uid)获取快照键?
【问题讨论】:
标签: javascript firebase firebase-realtime-database
我正在尝试结交朋友系统,但在接受邀请时,我必须删除他列表中某个人的邀请,但没有密钥我无法做到。
如何在数据库中按值(在本例中为 uid)获取快照键?
【问题讨论】:
标签: javascript firebase firebase-realtime-database
Firebase 实时数据库查询在单个路径上工作,然后在每个直接子节点下的固定路径上对值进行排序/过滤。在您的情况下,如果您知道用户是活跃的还是待定的,您可以找到一个特定的值:
const ref = firebase.database().ref("friends");
const query = ref.child("active").orderByValue().equalTo("JrvFaTDGV6TnkZq6uGMNICxwGwo2")
const results = query.get();
results.forEach((snapshot) => {
console.log(`Found value ${snapshot.val()} under key ${snapshot.key}`)
})
无法同时在 active 和 pending 节点上执行相同的查询,因此您必须为每个节点执行单独的查询,或者更改您的数据模型以获得单一的平面用户列表。在这种情况下,您可能会将每个用户的状态和 UID 存储为子属性,并使用 orderByChild("uid")。
还要注意,使用推送 ID 作为键在这里似乎是一种反模式,因为我的猜测是每个 UID 应该只有一个状态。一个更好的数据模型是:
friends: {
"JrvFaTDGV6TnkZq6uGMNICxwGwo2": {
status: "active"
}
}
【讨论】: