web-dev-qa-db-ja.com

firebase->日付の逆順

現在、Firebaseを使用してアプリを作成しています。

Webのどこでも見ることができる掲示板の1つです。

しかし、1つの問題がありました。

これは日付のソートの問題です。

最初に最近の日付を確認したいのですが、常に最初に作成したデータのみが表示されます。

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

結果-> hello1496941142093

私のファイヤーベースツリー enter image description here

私のコードは上記と同じです。

最初に最近の投稿を確認するにはどうすればよいですか?

Firebaseデータベースの逆を注文するにはどうすればよいですか?

9

Firebase Databaseは常に昇順で結果を返します。それらを元に戻す方法はありません。

これには2つの一般的な回避策があります。

  1. データベースにフィルタリングを行わせますが、結果をクライアント側で逆にします。
  2. データベースに反転値を追加し、クエリに使用します。

これらのオプションについては、これまでかなり頻繁に取り上げられてきました。したがって、繰り返す代わりに、以前の回答のリストを示します。

18

オブジェクトを反転し、それから走査する関数を作成するだけです。

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;
}
3
Suraj Kumar

フロントエンド部分でリストを作成する方法の変更を終了しました。

だった

posts.add(post);

に変更されました

posts.insert(0, post);
0
kashlo

これは私がそれを解決した方法です:最初に、ミリ秒単位の日付でフィルタリングするサービスでクエリを作成しました:

 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
Wolfyr