从今天开始按日期值排列的 Firebase 订单不起作用



我如何获取按日期字段值订购的数据?我想根据他们的 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);
});

最新更新