【问题标题】:firebase -> date order reversefirebase -> 日期顺序反转
【发布时间】:2017-11-10 14:06:09
【问题描述】:

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

它是在网络上随处可见的公告板之一。

但是有一个问题。

这是日期排序的问题。

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

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

结果->hello1496941142093

我的firebase树

我的代码和上面一样。

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

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

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    使用 Swift 的reversed() 更简单: https://developer.apple.com/documentation/swift/array/1690025-reversed https://developer.apple.com/documentation/swift/reversedcollection

    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}
    

    【讨论】:

      【解决方案2】:

      如果你想在前端显示,我建议你检索数据后,使用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();
      

      【讨论】:

        【解决方案3】:

        您可以使用一种方法,用负值保存相同或备用子项,然后对其进行解析。

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

        【讨论】:

          【解决方案4】:

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

          曾经

          posts.add(post);
          

          改为

          posts.insert(0, post);
          

          【讨论】:

            【解决方案5】:

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

             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 中扣除的较大数字,因此最新日期将首先出现在我的服务中的查询中。

            希望这能解决你的问题

            【讨论】:

              【解决方案6】:

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

              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;
              }
              

              【讨论】:

                【解决方案7】:

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

                有两种常见的解决方法:

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

                这些选项之前已经介绍过很多次了。因此,我不会重复,而是列出以前的答案:

                【讨论】:

                • 谢谢..首先我不明白 0 - new Date().Getitme() insert to in firebase in database.. 但我不明白.. 谢谢!
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2022-01-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-04-05
                相关资源
                最近更新 更多