Firebase结构化数据以检索补充结果

时间:2018-12-11 02:24:42

标签: javascript firebase react-native firebase-realtime-database nosql

我被困在使用Firebase实时数据库的本机应用程序上。 我有一个包含用户和问题的模型,其中一个用户可以回答许多问题,而一个问题可以被许多用户回答(多对多关系)。

我需要显示用户A尚未回答的问题。

当前,我的数据库的结构如下:

"questions" : {
   "q1" : {
      "description" : "Who am I?",
      "users" : {
        "userA" : {
           "answered" : true
        }
      }
   },
   "q2" : {
      "description" : "Where am I?",
      "users" : {
        "userB" : {
           "answered" : true
        }
      }
   }
 }

然后,我正在尝试像这样获取q2(用户A尚未回答的问题)

const ref = firebase.database().ref('questions');
ref.orderByChild('/users/userA/answered').equalTo(null).on('value', (snapshot) => {
  console.log(snapshot.val());
});

它可以正常工作,获取所需的数据,但是我遇到了以下问题:

  1. 由于深层嵌套的依赖关系,该结构看起来效率很低。我已经搜索了一些参考,他们建议使用中间节点(如questions_users / users_questions)(使用对question_id和user_id的参考)来将数据展平。但是,由于.equalTo(null)类型的查询,我无法实现此方法。我只是找不到一种方法来检索userA尚未回答的所有问题ID。

  2. 我尝试为questions/$questionId/users/$userId/answered属性建立索引。但是它一直声称我没有正确索引它。.

规则数据的结构如下:

{
  "rules": {
    ".read": true,
    ".write": true,
    "questions" : {
      "$questionId" : {
        "users" : {
          "$userId" : {
            ".indexOn" : ["answered"]
          }
        }
      }
     }
  }
}

我是Postgresql用户,所以我不使用这种结构,我很想念join子句): 谢谢

0 个答案:

没有答案