"error": "Указатель не определен, добавьте".indexOn "

Я создал базу данных в Firebase, которая выглядит так:

структура базы данных

Теперь я перехожу к клиенту REST и выдаю этот запрос:

https://movielens3.firebaseio.com/movieLens/users.json?orderBy="age"&startAt=25&print=pretty

Это дает мне ошибку:

"error": "Index not defined, add ".indexOn": "age", for path "/movieLens/users", to the rules"

Итак, я перехожу в раздел правила и определяю это правило:

{
    "rules": {
        "users" : {
          ".indexOn": ["age", "gender", "occupation", "zipCode"]
        },
        ".read": true,
        ".write": true
    }
}

Но я все равно получаю ту же ошибку.

Ответы

Ответ 1

Вы определяете индексы для /users. Не существует дочернего элемента node users прямо под корнем вашего дерева, поэтому эти индексы будут пустыми.

Вы запрашиваете /movieLens/users, чтобы определить индекс:

{
    "rules": {
        "movieLens": {
            "users" : {
                ".indexOn": ["age", "gender", "occupation", "zipCode"]
            },
            ".read": true,
            ".write": true
        }
    }
}

Обновление для проблемы в комментариях:

Вы сохраняете возраст пользователя как строку, поэтому не можете фильтровать их как число. Решение состоит в том, чтобы исправить ваши данные и сохранить их как число.

Но пока этот запрос несколько работает:

https://movielens3.firebaseio.com/movieLens/users.json?orderBy="age"&equalTo="35"

В JavaScript:

ref
  .orderByChild('age')
  .startAt('35')
  .limitToFirst(3)
  .once('value', function(s) { 
    console.log(JSON.stringify(s.val(), null, '  ')); 
  }, function(error) { 
    if(error) console.error(error); 
  })

"Несколько" заключается в том, что он делает лексический вид, а не численный. Исправьте данные для реального решения.

Обратите внимание, что вы также игнорируете лучшие методы Firebase, сохраняя данные в виде массива. Это уже вызывало проблемы для меня в REST API, поэтому я сбросил print=pretty. Я настоятельно рекомендую вам прочитать руководство по программированию Firebase для разработчиков JavaScript от начала до конца и следовать советам там. Несколько часов, которые уходят сейчас, предотвратят многочасовую проблему вниз.