【问题标题】:Firebase: Get hourly/daily/monthly countFirebase:获取每小时/每天/每月的计数
【发布时间】:2015-05-26 15:22:12
【问题描述】:

我是 Firebase 的新手,来自 MySQL。我无法解决这个问题,这对于 MySQL 来说是微不足道的。我想以每小时、每天或每月的间隔检索记录数(在本例中为访问)。每次访问都会在 Firebase 中记录如下(我可能也记错了)。

{
    "visit": {
      "timestamp": 1414622353610,
      "user": "198"
    },
    "visit": {
      "timestamp": 1414622353680,
      "user": "55"
    },
    "visit": {
      "timestamp": 1414622353710,
      "user": "60"
    }
}   

我将如何在 Firebase 中实现这一点。我在 Firebase 文档中没有找到任何相关的查询方法。我正在使用 Firebase REST API,因此使用 REST 的示例会更有帮助。

【问题讨论】:

  • 这里是 Firebase 工程师。 Firebase 等数据存储被称为 NoSQL 是有原因的。 :-) 通常解决方案是非规范化您的数据结构。您可能应该阅读 firebase.com/blog/2013-04-12-denormalizing-is-normal.html 。 Kato 的这篇文章似乎也很相关:firebase.com/blog/2013-10-01-queries-part-one.html#between。请注意,自从编写了这两个文件以来,Firebase 已经显着增长。因此,尽管这些概念仍然非常相关,但使用今天的 Firebase 可能会有更简单的方法来实现。
  • @FrankvanPuffelen 我确实读过那些文章。但是,我无法将文章与手头的问题联系起来。您将如何使用 Firebase 实现这一目标?

标签: firebase


【解决方案1】:

我设置了一个 Firebase,其数据结构与您展示的类似。

此查询将在特定分钟内为您提供事件:

var ref = new Firebase('https://<yours>.firebaseio.com/'),
    startTime = 1427138419385,
    endTime = startTime + 60 * 1000;
ref
    .orderByChild('timestamp')
    .startAt(startTime)
    .endAt(endTime)
    .once('value', function(snap) {
       console.log('There are ', messages.numChildren(), ' messages in range', snap.val());
    });

工作小提琴:http://jsfiddle.net/qg5hmong/

请注意,此代码相当直接地改编自这篇博文:https://www.firebase.com/blog/2013-10-01-queries-part-one.html#between。唯一的区别是我们现在可以使用orderByChild,在加藤写这篇博文的时候还不存在。

【讨论】:

  • 感谢您的回答。但是,这只会返回在开始时间和结束时间之间找到的记录。相反,我在开始和结束时间之间以 1 小时的间隔查找记录计数。在下午 12 点到下午 4 点的 SQL 中,我基本上会得到一个类似 [4, 10, 5, 20] 的数组。每个索引处的值表示以一小时为间隔的记录数。
  • 请参阅firebase.com/docs/web/api/datasnapshot/numchildren.html 了解如何获得计数。除此之外,您似乎很好地掌握了您的要求。我建议您继续使用上面的代码作为实现它们的起点。
  • 我相信您的建议是我需要进行 4 次查询以获取每小时 4 小时的计数,同样需要 24 小时的 24 次查询?每个查询都以开始时间作为小时的开始,以结束时间作为小时的结束。对吗?
  • 这是一种方法。或者,您以需要数据的每小时格式存储它。这会使数据写入更加昂贵(并且可能会复制一些数据),但读取它会非常便宜。
  • Frank 在这里为您提供了您需要的所有工具。这听起来更像是您希望他编写代码而不是回答问题。需要一些组装。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
相关资源
最近更新 更多