我如何获取按日期字段值订购的数据?我想根据他们的 start 字段值从现在开始显示所有事件()?我认为这不会那么困难,但我无法使它正常工作。
我的firebase数据是:
"events" : {
"-KwX5oG6TYNWWhLYC5rx" : {
"ends" : "2018-01-04T23:30:47.071Z",
"starts" : "2018-01-02T23:30:47.062Z",
"title" : "Event 1"
},
"-L0Id2D34D2Sd2T5oyXX" : {
"ends" : "2017-12-27T23:30:39.566Z",
"starts" : "2017-12-26T23:30:39.552Z",
"title" : "Event 2"
}
}
查询火箱数据的代码:
const today = new Date().toISOString();
const ref = FirebaseRef.child("events").orderByChild('starts').startAt(today);
return ref.on('value', (snapshot) => {
const events = snapshot.val() || {};
// DO SOMETHING
});
我也尝试将数据存储为UNIX TIMESTAMP,而不是ISO字符串,但仍然不起作用。
很可能是由于您在查询结果上执行snapshot.val()
而引起的。当您从firebase数据库订购数据时,您会收回三件事:键,值和项目的顺序。
当您在快照上调用val()
时,您会恢复该值的JSON表示形式,该值仅适用于键和值。而且,由于JSON对象中属性的属性顺序不确定,因此您的结果顺序不确定(尽管大多数浏览器显示了按密钥订购的订单)。
要解决此问题,请使用Snapshot.forEach()
迭代快照中的结果:
return ref.on('value', (snapshot) => {
var events = [];
snapshot.forEach((child) => {
events.push(child.val());
});
console.log(events);
});