firebase -> 日期顺序相反

IT技术 javascript firebase firebase-realtime-database
2021-01-18 16:04:04

我目前正在使用 Firebase 制作应用程序。

它是可以在网络上的任何地方看到的公告板之一。

但是有一个问题。

这是日期排序的问题。

我想先看看最近的日期,但我总是只看到我最先创建的数据。

postRef.orderByChild('createData').startAt(reverseDate).limitToFirst(1).on('child_added',(data)=>{
    console.log(data.val().name + data.val().createData);
})

结果->hello1496941142093

我的火力树在此处输入图片说明

我的代码和上面一样。

如何先查看我最近的帖子?

我如何订购 firebase 数据库的反向?

6个回答

Firebase 数据库将始终按升序返回结果。没有办法扭转它们。

有两种常见的解决方法:

  1. 让数据库进行过滤,然后在客户端反转结果。
  2. 向数据库添加一个反向值,并将其用于查询。

这些选项之前已经讨论过很多次了。因此,与其重复,我将列出以前的答案:

谢谢.. 首先我不明白 0 - new Date().Getitme() 插入到数据库中的 firebase .. 但我不明白.. 谢谢!
2021-04-02 16:04:04

您可以简单地创建一个函数来反转对象,然后遍历它。

function reverseObject(object) {
    var newObject = {};
    var keys = [];

    for (var key in object) {
        keys.push(key);
    }

    for (var i = keys.length - 1; i >= 0; i--) {
        var value = object[keys[i]];
        newObject[keys[i]]= value;
    }       

    return newObject;
}

我是这样解决的:首先,我在我的服务中进行了一个查询,其中我以毫秒为单位按日期过滤:

 getImages (): Observable<Image[]> {
this.imageCollection = this.asf.collection<Image>('/images', ref => ref.orderBy('time').startAt(1528445969388).endAt(9999999999999));
this.images = this.imageCollection.snapshotChanges().pipe(
  map(actions => actions.map(a => {
    const data = a.payload.doc.data() as Image;
    const id = a.payload.doc.id;
    return { id, ...data };
  }))
);
return this.images;

}

然后为了首先获取最新日期,我将它添加到我的组件中,我从我的服务调用该方法:

let date = new Date;
let time = 9999999999999 - date.getTime();
console.log(time);

我把时间当作日期。由于较新的日期将是从 9999999999999 中扣除的较大数字,因此最新日期将首先出现在我的服务中的查询中。

希望这为您解决了

如果你想在前端展示出来,我建议你检索数据后,使用reverse()JavaScript功能。

例子:

let result = postRef
  .orderByChild("createData")
  .startAt(reverseDate)
  .limitToFirst(1)
  .on("child_added", data => {
    console.log(data.val().name + data.val().createData);
  });

result.reverse();

我已经结束更改我在前端部分创建列表的方式。

曾是

posts.add(post);

变成

posts.insert(0, post);