如何解决orderByChild的Firebase未指定索引错误?
我得到以下错误: FIREBASE警告:使用未指定的索引。您的数据将在客户端上下载和筛选。考虑向您的安全规则添加“.Noxon”:“Reals/DodZdZoZDZ”,以获得更好的性能。我什么都试过了,但还是不起作用 我的数据库规则:如何解决orderByChild的Firebase未指定索引错误?,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我得到以下错误: FIREBASE警告:使用未指定的索引。您的数据将在客户端上下载和筛选。考虑向您的安全规则添加“.Noxon”:“Reals/DodZdZoZDZ”,以获得更好的性能。我什么都试过了,但还是不起作用 我的数据库规则: { "rules": { ".read": false, ".write": false, "questions": { ".read": "auth != null", ".write": "auth !=
{
"rules": {
".read": false,
".write": false,
"questions": {
".read": "auth != null",
".write": "auth != null",
".indexOn": ["answers/uid","author","timestamp"],
"answers":{
"$uid":{
".indexOn":["uid","question"] ,
}
}
我的代码:
const ref = FirebaseRef.child('questions');
const UID = Firebase.auth().currentUser.uid;
ref
.orderByChild('answers/' + UID)
.limitToLast(this.state.limit)
.once('value', snapshot => {
console.log('FireB ', snapshot);
我的数据库:
"my_answers" : {
"yrpgRXZ8LMbzGbBGs3M0WZ1V0WY2" : {
"-LswFeY4lyIvX4DFFNue" : {
"answers" : "Www",
"date_add" : 1572970139448,
"question" : "2"
}
}
},
"my_questions" : {
"9jNkvzr0chgPi0SC6rXMlVWdOF12" : {
"-LswFbyh-SP_vuj13MK_" : {
"date_add" : 1572969021413,
"question" : "1"
},
"-LswFeY4lyIvX4DFFNue" : {
"date_add" : 1572969031933,
"question" : "2"
}
}
},
"questions" : {
"-LswFbyh-SP_vuj13MK_" : {
"author" : "9jNkvzr0chgPi0SC6rXMlVWdOF12",
"date_add" : 1572969021413,
"question" : "1"
},
"-LswFeY4lyIvX4DFFNue" : {
"answer" : {
"yrpgRXZ8LMbzGbBGs3M0WZ1V0WY2" : {
"answer" : "Www",
"date_add" : 1572970139448
}
},
"author" : "9jNkvzr0chgPi0SC6rXMlVWdOF12",
"date_add" : 1572969031933,
"question" : "2"
}
},
除了这个错误,在这个数据库中,通常会有发布问题的用户,以及回答问题的回复者!因此,我对用户的问题列表、回复者的答案列表以及回复者回答问题时将获得更新的问题公共列表(添加答案:)做了一个my_提问有很多重复数据,但我了解到这与firebase有关吗?您的
orderByChild
呼叫正在请求基于answers/dodzzdzodzdz
(例如某些特定的UID)的排序(从questions/
开始),但您正试图在字符串answers/UID
上创建索引。错误消息告诉您需要运行查询的特定对象的索引
如果你不清楚自己到底想实现什么,就很难提出真正的解决方案。当然,在请求的UID上添加显式索引是可行的,但在这种情况下似乎不太可能正确,因为您可能希望它适用于任何UID
或者,如果您试图仅按'questions/answers/'+UID
下所有对象的键排序,则这可能会起作用,并且不需要索引。(我注意到这个层次结构实际上并不在您提供的数据中,我是基于您的原始查询对其进行建模的)
ref.child('answers/'+UID).orderByKey().limitToLast(this.state.limit)
.once('value',快照=>{
console.log('FireB',快照);
});
我正在处理数据库的其他结构!你能给我一些建议吗?这取决于通常SO格式在设计评审类问题上做得不好(很难找到“正确答案”)。如果您编辑您的问题以显示您当前的数据库结构和预期的输出,我可以尝试为您提供更好的答案。感谢您添加数据库数据。还请在问题后面附加一个正确的结果,即您希望所问的代码能够实现的结果。我有点困惑,因为(a)层次结构中没有问题/答案
部分,(b)数据库中只有一个答案,所以对它进行排序并不是很有趣。