根据时间查询Firebase

时间:2015-08-31 23:28:49

标签: angularjs firebase

我正在尝试根据时间限制查询我的Firebase。我正在使用附加的this blog post关注jsFiddle

问题是我得到了一个空白的firebaseArray回来了。

        var currentTime = (new Date).getTime();
        var twentyFoursHoursAgo = currentTime - 86400000;

        //scoresRef is defined as new Firebase(http://myfirebase.firebaseio.com/scores)
        scoresRef.on('value', function (dataSnapshot) {
        var summaryScores = $firebaseArray(scoresRef.orderByChild('timestamp').startAt(twentyFoursHoursAgo).endAt(currentTime));
        $scope.summaryScores = summaryScores;
        console.log(summaryScores);
        }

这个想法是,当用户添加更多分数时,阵列将会改变。然后我可以对它进行不同的数据操作(如平均值等)。这样,应用程序上可以显示24小时运行平均值。

这就是Firebase中的数据:

enter image description here

我做错了什么?我知道数据就在那里。

1 个答案:

答案 0 :(得分:2)

不确定这是否能回答你的问题,但我能做的最好的事情就是向你展示一些有用的东西。

查询一系列时间戳

我添加了这个数据结构:

{
    "-Jy5pXbn5RpiK1-5z07O": {
        "timestamp": 1441076226561
    },
    "-Jy5pZJsYvsmv_dMtCtn": {
        "timestamp": 1441076173543
    },
    "-Jy5paWbkU6F8C6CEGpj": {
        "timestamp": 1441076181550
    },
    "-Jy5pbc0pJ1I5azenAi5": {
        "timestamp": 1441076247056
    },
    "-Jy5pfnMDKExW2oPf-D-": {
        "timestamp": 1441076204166
    },
    "-Jy5pgk55ypuG9_xICq-": {
        "timestamp": 1441076268053
    },
    "-Jy5phVgU2hDE_izcR8p": {
        "timestamp": 1441076271163
    },
    "-Jy5pilBteGhu05eMWQI": {
        "timestamp": 1441076215315
    }
}

然后用这段代码查询:

var ref = new Firebase('https://stackoverflow.firebaseio.com/32321406');

var startAt = 1441076265715;
var endAt = startAt + 15000;

var query = ref.orderByChild('timestamp')
               .startAt(startAt)
               .endAt(endAt);
query.on('value', function(snapshot) {
    console.log(snapshot.val());
});

哪个输出:

{
  -Jy5pgk55ypuG9_xICq-: {
    timestamp: 1441076268053
  },
  -Jy5phVgU2hDE_izcR8p: {
    timestamp: 1441076271163
  }
}

警告我应该为timestamp添加索引规则。

jsbin:http://jsbin.com/qaxosisuha/edit?js,console

将一组数据从Firebase绑定到AngularJS

如果您尝试将查询结果绑定到AngularJS视图,请执行以下操作:

$scope.items = $firebaseArray(query);

使用AngularFire时不要尝试使用console.log来监控进展情况。而是将其添加到您的HTML中:

<pre>{{ items | json }}</pre>

这将打印项目并在​​数据异步加载和更新时自动更新。

请注意,这可能是浏览Firebase AngularFire programming guide的好时机,它以一种非常容易理解的方式解释this last bit和更多主题。