2016-12-05 1 views
1

Мой Firebase Database попал следующие данные:Как использовать GroupBy в Firebase базе данных

datas=[ 
    { "category" : "Content Server", "hits" : 1, "bytes" : 17308 }, 
    { "category" : "Content Server", "hits" : 1, "bytes" : 47412 }, 
    { "category" : "Search Engines", "hits" : 1, "bytes" : 7601 }, 
    { "category" : "Content Server", "hits" : 1, "bytes" : 24210 }, 
    { "category" : "Internet Services", "hits" : 1, "bytes" : 3690 }, 
    { "category" : "Search Engines", "hits" : 6, "bytes" : 613036 }, 
    { "category" : "Search Engines", "hits" : 1, "bytes" : 2858 } 
    ]; 

Как мы можем сделать в Firebase Database эквивалент этой SQL запроса ?:

SELECT category, sum(hits), sum(bytes) 
FROM datas 
GROUP BY category 

ответ

2

Firebase является базу данных NoSQL. Попытка сопоставить парадигмы SQL с базой данных NoSQL - это гарантированный способ причинить вам боль.

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

Для этого конкретного сценария использования, я рекомендовал бы модифицировать структуру данных, чтобы отразить фактическую иерархию и агрегированных данных вы пытаетесь получить доступ:

categoryAggregates: 
    "Content Server": { hitsCount: 3, bytesCount: 88930 } 
    "Internet Services": { hitsCount: 1, bytesCount: 3690 } 
    "Search Engines": { hitsCount: 3, bytesCount: 1233673 } 

Добавление такой структуры в конечном итоге дублирования данных и делает его более сложным/дорогостоящим. Но вы, вероятно, можете себе представить, что доступ к агрегатам становится дешёвым с такой структурой. Это снова общий шаблон с базами данных NoSQL, они оптимизированы для чтения-производительности за счет более сложных/дорогих записей.

Рекомендую прочитать около NoSQL data modeling, сначала посмотрев наш видеоролик Firebase for SQL developers, а затем прочитав некоторые из questions that have already tried this.

+0

Спасибо. Я буду двигаться в направлении ваших рекомендаций. – Sezer

+0

Приятно слышать! Если бы мой ответ был полезен, нажмите кнопку вверху слева от него. Если он ответил на ваш вопрос, нажмите галочку, чтобы принять его. Таким образом, другие знают, что вам (в достаточной мере) помогли. –