我是Angular和Firebase的新手。我来自SQL查询,所以在firebase中查询对我来说可能很棘手。
我在firebase中使用了这个对象结构:( [EDIT] - firebase中真正的JSON结构)
"acceleration-values" : {
"-KyGw8gDF4thAie8_hYk" : {
"timestamp" : "2017/10/1_15:26:24:712",
"value" : 2.3403
},
"-KyGw8if5_oCaqy1b9Y8" : {
"timestamp" : "2017/10/1_15:26:24:912",
"value" : 4.38385
},
"-KyGw8ou_viOW6hKARTC" : {
"timestamp" : "2017/10/1_15:26:25:310",
"value" : 0.28864
},
"-KyGw8yJw_cgwuB4tYyu" : {
"timestamp" : "2017/10/1_15:26:25:912",
"value" : 1.6212
},
"-KyGw96gH7O6h3oPAyCf" : {
"timestamp" : "2017/10/1_15:26:26:512",
"value" : 4.36751
}
}
我需要在时间戳'时获得加速对象。等于或大于某个值。
我在angular and firebase文档中搜索但没有成功。我尝试使用' startAt'没有成功,因为我可能不知道如何正确使用它。我认为我的问题非常具体,以至于文档无法提供帮助。
如果我能得到一些帮助,我将非常感激。 无论如何,谢谢你。
=== [编辑] ===
正如@Chris所说,我可以将数据存储为地图。说实话,解决方案看起来很简单。 我只需要提问: 1.除了值之外,我怎样才能检索密钥(时间戳)? 2.如果我实施了该解决方案,我可以添加用户吗?喜欢这样的事情:
- acceleration-values:{
- user_1: {
- 2017-11-08T01:00:00+01:00: X.XXXX
- 2017-11-09T01:00:00+01:00: X.XXXX
}
- user_2: {
- 2017-11-08T01:00:00+01:00: X.XXXX
- 2017-11-08T01:00:00+01:00: X.XXXX
- 2017-11-08T01:00:00+01:00: X.XXXX
- 2017-11-09T01:00:00+01:00: X.XXXX
}
- user_3: {
- 2017-11-08T01:00:00+01:00: X.XXXX
- 2017-11-08T01:00:00+01:00: X.XXXX
- 2017-11-09T01:00:00+01:00: X.XXXX
}
}
如果我可以在编辑中显示某些内容,那就太棒了。
再次感谢你。
=== [编辑 - 2] ===
这就是我所拥有的。它给了我firebase中的所有值,但是如前所述,我只需要在给定时间戳之后的值(和时间戳)。
this.accelerationValuesRef = this.db.list('/acceleration-values');
this.accelerationSubscription = this.accelerationValuesRef.snapshotChanges()
.map(actions => {
return actions.map(action => {
const data = action.payload.val();
const $key = action.payload.key;
return {$key, ...data}
});
}).subscribe(data => this.accelerationValues = data);
谢谢大家的关注。
=== [编辑 - 3] ===
(我所做的一切都是假设,因为我从来没有用过这个)
尝试和错误后,我想我到了某个地方。
现在我有了这个:
this.accelerationValuesRef = this.db.list('/acceleration-values',
ref => ref.startAt(this.getYesterday())
);
this.accelerationSubscription = this.accelerationValuesRef.snapshotChanges()
.map(actions => {
return actions.map(action => {
const data = action.payload.val();
const $key = action.payload.key;
return {$key, ...data}
});
}).subscribe(data => this.accelerationValues = data);
注意:' getY yesterday()'是一个返回昨天日期的函数。
我创建了对列表的引用(加速度值)并从给定参数开始。我的问题是:我怎么能说我想引用'时间戳'变量?
感谢您的关注和时间。
答案 0 :(得分:0)
弗兰克提到这确实是可能的。
您在上面显示的数据结构看起来像一个数组,这不起作用。您需要将其存储为地图。您的数据结构可能如下所示:
movidadomus: {
- acceleration-values:{
//Note the different date format, you can't use '/' in a key in firebase
2017-11-08T01:00:00+01:00: X.XXXX
2017-11-08T01:00:00+02:00: X.XXXX
2017-11-08T01:00:00+03:00: X.XXXX
}
}
然后您可以像ref.child('movidadomus').child('acceleration-values').orderByKey().startAt('2017-11-08T01:00:00+01:00')
如果您不熟悉firebase,并且刚刚开始使用数据库,我建议您使用他们的新产品Firestore。除非你需要实时功能(Firestore仍然提供这种功能),否则这就是我认为的方式。