Javascript firebase->;日期顺序相反

Javascript firebase->;日期顺序相反,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我目前正在使用Firebase制作一个应用程序 这是在网上任何地方都能看到的公告栏之一 但有一个问题 这是一个日期排序的问题 我想先查看最近的日期,但我总是只看到我首先创建的数据 postRef.orderByChild('createData').startAt(reverseDate).limitToFirst(1).on('child_added',(data)=>{ console.log(data.val().name + data.val().createData);

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

这是在网上任何地方都能看到的公告栏之一

但有一个问题

这是一个日期排序的问题

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

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

我的火基树

我的代码与上面相同

我怎样才能先查看我最近的帖子


如何对firebase数据库进行反向排序?

firebase数据库将始终以升序返回结果。没有办法扭转这种局面

有两种常见的解决方法:

  • 让数据库进行过滤,然后在客户端反转结果
  • 向数据库中添加一个反向值,并将其用于查询
  • 这些选项以前已经讨论过很多次了。因此,我不再重复,而是列出以前的答案:

    • 此列表中还有更多内容:

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

    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;
    
    我把时间当作日期。由于较新的日期将是从99999999999中扣除的较大数字,因此最新日期将首先出现在我的服务内的查询中


    希望这能为您解决问题

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

    改为

    posts.insert(0, post);
    

    您可以使用一种方法,在该方法中使用负值保存同一子级或备用子级,然后对其进行解析

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

    如果您想在前端显示它,我建议在检索数据后,使用JavaScript的
    reverse()
    函数

    例如:

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

    更简单的方法是使用Swift的
    reversed()


    非常感谢。首先,我不理解0-new Date().Getitme()在数据库中的firebase中插入到。。但我不明白。。非常感谢。它不适用于对象。
    postRef.orderByChild('createData').orderByChild('createData').on('child_added',(data)=>{
    console.log(data.val().name + data.val().createData);})
    
    let result = postRef
      .orderByChild("createData")
      .startAt(reverseDate)
      .limitToFirst(1)
      .on("child_added", data => {
        console.log(data.val().name + data.val().createData);
      });
    
    result.reverse();
    
    let decodedIds = try DTDecoder().decode([String].self, from: value)
    // we reverse it, because we want most recent orders at the top
    let reversedDecodedIds = decodedIds.reversed().map {$0}