Javascript Firebase实时数据库-组合多个提取操作?
我想让多个用户可以访问Firebase实时数据库中他们有权访问的“消息”。数据库获取读取“/messages”,并返回用户作为“author”和“member”访问的所有消息的两个集合 数据库结构如下所示:Javascript Firebase实时数据库-组合多个提取操作?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想让多个用户可以访问Firebase实时数据库中他们有权访问的“消息”。数据库获取读取“/messages”,并返回用户作为“author”和“member”访问的所有消息的两个集合 数据库结构如下所示: "messages" : { "msg_id1": { "access": { "author": "user-id-1", "members": { "user-id-2": true } } "data" :
"messages" : {
"msg_id1": {
"access": {
"author": "user-id-1",
"members": {
"user-id-2": true
}
}
"data" : {
"theData": "Hello world!"
}
}
}
我创建了以下规则:
{
"rules": {
"messages": {
".read": "
auth.uid !== null &&
query.equalTo === auth.uid
"
}
}
相应的数据库查询包括:
database.ref("messages")
.orderByChild("access/author")
.equalTo(`${user.uid}`)
.once('value', (snapshot) => {
snapshot.forEach( (data) => {
console.log("OWNER", data.val().data.title)
})
})
database.ref("messages")
.orderByChild(`access/members/${user.uid}`)
.equalTo(true)
.once('value', (snapshot) => {
snapshot.forEach( (data) => {
console.log("MEMBER", data.val().message.data.title)
})
})
我希望将调用数据库两次的开销和成本降至最低
是否有一种聪明的方法将数据库查询优化为一个数据库调用
/K您必须将数据复制到数据库中的另一个位置,该位置的组织方式应确保您可以通过一次查询获得所需的一切。这实际上在NoSQL类型的数据库中很常见。请注意,对数据库的调用次数通常只是性能的一个小因素,因为Firebase可以通过其现有连接将大多数请求管道化。请参见Thank you@DougStevenson-您能将我链接到关于此类数据组织最佳实践的更多信息吗?您必须将数据复制到数据库中的另一个位置,该位置的组织方式是,您可以通过一次查询获得所需的一切。这实际上在NoSQL类型的数据库中很常见。请注意,对数据库的调用次数通常只是性能的一个小因素,因为Firebase可以通过其现有连接将大多数请求管道化。请参阅Thank you@DougStevenson-您能将我链接到有关此类数据组织最佳实践的更多信息吗?