根据今天的日期值的Firebase订单不起作用

时间:2017-12-18 02:05:58

标签: javascript firebase firebase-realtime-database

如何获取按日期字段值排序的数据?我想根据现在()的开始字段值显示所有事件?我不认为会那么难,但我无法正常工作。

我的火力基础数据是:

    "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字符串,但仍无法正常工作。

1 个答案:

答案 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);
});