Firebase -> 日期倒序

13

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

这是那种可以在Web上任何地方看到的公告栏之一。

但有一个问题。

这是关于日期排序的问题。

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

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

结果 - >hello1496941142093

我的 Firebase 树进入图像说明

我的代码与上面相同。

如何检查最近的帖子?

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

8个回答

24

Firebase数据库始终会按升序返回结果,无法将其反转。

有两种常见的解决方法:

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

这些选项已经被多次涉及。因此,我将提供之前答案的列表而非重复解释:


谢谢您。一开始我不明白0- new Date().Getitme()如何插入Firebase数据库中,但现在我懂了。再次感谢! - King in the world.

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

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();

1
这是我的解决方案: 首先,我在我的服务中进行了一个查询,通过毫秒级日期过滤:
 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,因此最新的日期将首先出现在我的服务查询中。
希望这能解决你的问题。

0
orderBy("timestamp", "desc")

我认为您可以给第二个参数命名为“desc”。 这对我有效。


0

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

过去是这样的

posts.add(post);

改为

posts.insert(0, post);

0

你可以使用一种方法,其中你保存相同或替代的子元素,并将其解析为负值。

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接