2016-12-05 57 views
1

我的火力地堡数据库已经得到了以下数据:如何使用GROUPBY在火力地堡数据库

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 } 
    ]; 

我们怎样才能使火力地堡数据库中对应的 SQL查询?:

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

回答

2

火力地堡是一个NoSQL数据库。试图以1:1的比例将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

好听!如果我的回答很有用,请点击左侧的upvote按钮。如果它回答了您的问题,请点击复选标记以接受它。这样别人就知道你已经(充分)帮助了。 –