我被困在使用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());
});
它可以正常工作,获取所需的数据,但是我遇到了以下问题:
由于深层嵌套的依赖关系,该结构看起来效率很低。我已经搜索了一些参考,他们建议使用中间节点(如questions_users / users_questions)(使用对question_id和user_id的参考)来将数据展平。但是,由于.equalTo(null)
类型的查询,我无法实现此方法。我只是找不到一种方法来检索userA尚未回答的所有问题ID。
我尝试为questions/$questionId/users/$userId/answered
属性建立索引。但是它一直声称我没有正确索引它。.
规则数据的结构如下:
{
"rules": {
".read": true,
".write": true,
"questions" : {
"$questionId" : {
"users" : {
"$userId" : {
".indexOn" : ["answered"]
}
}
}
}
}
}
我是Postgresql用户,所以我不使用这种结构,我很想念join子句): 谢谢