如何获取按日期字段值排序的数据?我想根据现在()的开始字段值显示所有事件?我不认为会那么难,但我无法正常工作。
我的火力基础数据是:
"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"
}
}
查询firebase数据的代码:
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时间戳,而不是ISO字符串,但仍无法正常工作。
答案 0 :(得分:1)
问题很可能是由于您对查询结果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);
});