如何解决orderByChild的Firebase未指定索引错误?

我遇到以下错误:

  

FIREBASE警告:使用未指定的索引。您的数据将在客户端上下载并过滤。考虑在/ questions的安全规则中添加“ .indexOn”:“ answers / dodzzdzodzdz”,以提高性能。我尝试了一切,但仍然无法正常工作?

我的数据库规则:

 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,"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"
    }
  },

我的数据库:

 List<Map<String,Object>> mapList = jdbctemplate.queryForList(query));
    return mapList.stream().collect(Collectors.toMap(k -> (Long) k.get("userid"),k -> (String) k.get("username")));

除此错误外,在此数据库中,更普遍的是,还会有用户发布问题,而响应者也回答问题!所以我做了一个my_questions用于按用户列出问题,my_answers用于按回答者列出答案,以及问题公开列表,当响应者回答这个问题时,谁将得到更新(添加答案:),有很多重复的数据,但是我读过与firebase有关的事情?

mm00ll 回答:如何解决orderByChild的Firebase未指定索引错误?

您的orderByChild呼叫正在请求基于questions/(例如某些特定 UID)的订购(从answers/dodzzdzodzdz开始),但是您正在尝试创建字符串answers/uid上的索引。错误消息告诉您,您需要在运行查询的特定事物上建立索引。

没有一个关于您要实际实现的目标的清晰概念,很难提出一个真正的解决方案。当然,在请求的UID上添加显式索引是可以的,但在这种情况下似乎不太正确,因为您可能希望此方法适用于任何UID。

或者,如果您尝试仅按'questions/answers/' + UID下所有对象的键进行排序,则可能会起作用,并且不需要索引。 (我确实注意到该层次结构实际上不在您提供的数据中,而是根据您的原始查询对其进行建模)。

ref.child('answers/' + UID).orderByKey().limitToLast(this.state.limit)
  .once('value',snapshot => {    
    console.log('FireB ',snapshot);
  });
本文链接:https://www.f2er.com/3160424.html

大家都在问