【发布时间】:2018-04-21 02:11:21
【问题描述】:
我是 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
}
}
当 'timestamp' 等于或大于某个值时,我需要获取加速对象。
我在 angular 和 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);
注意:'getYesterday()' 是一个返回昨天日期的函数。
我创建了对我的列表(加速度值)的引用,并从给定参数开始。我的问题是:我怎么能说我想引用 'timestamp' 变量?
感谢您的所有关注和时间。
【问题讨论】:
-
因为它应该相当简单(并且确实需要
startAt),所以问题可能在于您如何使用它的细节。您能否更新您的问题以显示您尝试过的代码? -
@FrankvanPuffelen,我已经尝试了很多东西并删除了尝试其他东西,现在我没有任何关于我如何使用它的解决方案......我已经阅读了文档并尝试复制我的问题没有成功。如果您有可能的解决方案,我想听听。 P.S.:编辑是针对克里斯提出的解决方案,但你同意这一点,你也可以详细说明。无论如何,谢谢你的时间
标签: angular firebase firebase-realtime-database