Как решить ошибку неопределенного индекса Firebase для orderByChild? - PullRequest
0 голосов
/ 05 ноября 2019

Я получаю следующую ошибку:

ПРЕДУПРЕЖДЕНИЕ О ПОЖАРЕ: использование неопределенного индекса. Ваши данные будут загружены и отфильтрованы на клиенте. Для повышения производительности рассмотрите возможность добавления «.indexOn»: «answers / dodzzdzodzdz» в / questions к правилам безопасности. Я попробовал все, но все еще не работает?

мои правила базы данных:

 {
  "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_questions для списка вопросов пользователя, my_answers для списка ответов респондентов и публичного списка вопросов, который будет обновляться, когда респонденты отвечают на вопрос (добавляя ответ :)), есть много повторяющихся данных, но я прочитал вотчто делать с firebase?

1 Ответ

0 голосов
/ 05 ноября 2019

Ваш orderByChild вызов запрашивает порядок (начиная с questions/), основанный на answers/dodzzdzodzdz (например, некоторые специфичные UID), но вы пытаетесь создать индекс для строки answers/uid. Сообщение об ошибке говорит вам, что вам нужен индекс для конкретной вещи, по которой вы выполняете запрос.

Без более ясного представления о том, чего вы пытаетесь достичь на самом деле, трудно предложить реальное решение. Конечно, добавление явного индекса для запрошенного UID будет работать, но вряд ли будет правильным в этом случае, поскольку вы, вероятно, хотите, чтобы это работало для любого UID.

В качестве альтернативы, если вы пытаетесь просто упорядочить поключи всех объектов в 'questions/answers/' + UID могут работать и не требуют индекса. (Я отмечаю, что на самом деле эта иерархия отсутствует в предоставленных вами данных, я моделирую ее на основе вашего исходного запроса).

ref.child('answers/' + UID).orderByKey().limitToLast(this.state.limit)
  .once('value', snapshot => {    
    console.log('FireB ', snapshot);
  });
...