Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase实时数据库-组合多个提取操作?_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase实时数据库-组合多个提取操作?

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" :

我想让多个用户可以访问Firebase实时数据库中他们有权访问的“消息”。数据库获取读取“/messages”,并返回用户作为“author”和“member”访问的所有消息的两个集合

数据库结构如下所示:

"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-您能将我链接到有关此类数据组织最佳实践的更多信息吗?