Использование .indexOn с вложенными ключами в Firebase

У меня есть куча ключей, которые я хочу индексировать, используя .indexOn

Предположим, что мои данные выглядят следующим образом. Я хочу иметь возможность использовать .orderByChild("height").

{
  "lambeosaurus": {
    "stats": {
      "height" : 2.1,
      "length" : 12.5,
      "weight": 5000
    }
  },
  "stegosaurus": {
    "stats": {
      "height" : 4,
      "length" : 9,
      "weight" : 2500
    }
  }
}

Каким образом я определяю правило индексирования height, которое является дочерним элементом stats? Нужно ли мне реструктурировать или сгладить мои данные?

Ответ 1

Теперь вы можете запросить и индексировать произвольно глубоко.

{
  "rules": {
    "$dinosaur": {
      ".indexOn": ["stats/height"]
    }   
  }
}

и запрос по вложенным значениям:

.orderByChild('stats/height')

Ответ 2

Обновление 2015/12/17: Firebase теперь поддерживает глубокую индексацию, поэтому см. ответ Tom.


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

{
  "rules": {
    "$dinosaur": {
      "stats": {
        ".indexOn": ["height"]
      }
    }   
  }
}