所以我的数据结构如下所示:
因此,为了显示用户预订,我需要uID
和date
return this.firebase.database.list('/reservations', {
query: {
orderByChild: 'uID',
equalTo: uID
}
});
如何将date
字段添加到我的查询中,使其大于当前日期?
答案 0 :(得分:0)
问题是一次只能查询一个字段的实时数据库。所以要走的路可能是:
uID_dateValid
,其中包含uid字符串,只是添加了有效字段 - KGHFHJKJ_VALID
所以在你的情况下它会是这样的:
const dateValid$ = this.firebase.database.list('/reservations', {
var currentTime = new Date().getTime();
query: {
orderByChild: 'date',
startAt: currentTime
}
});
// just to note - you might not need three rows like you have now -
// "date", "dateTime", "time". You can save one row where value is a
// timestamp, like in my variable "currentTime" above.
dateValid$.map(items => items.map(item => {
var key = item.$key;
var uID_dateValid = item.uID + '_VALID';
dataToSave[`reservations/${key}/uID_dateValid`] = uID_dateValid;
return this.firebaseUpdate(dataToSave);
})).subscribe();
现在你可以查询并返回:
return this.firebase.database.list('/reservations', {
var valid = uID + '_VALID';
query: {
orderByChild: 'uID_dateValid',
equalTo: valid
}
});
可能存在一些语法或次要的逻辑错误,但这个想法很清楚。
其他方式是,只需查询数据库两次,获取两个列表并在客户端过滤它们。
还有一种方法可能是查询两次,获取这两个Observable,找到匹配的记录并返回这些键的Observable,但在流的上下文中我有点不确定如何做到这一点..