2017-12-12 4 views
3

データベースからすべてのデータを取得すると、データベースから最後のエントリが取得されます(キーはこのように動作するように生成されます)。このようなもの:Firebase equalToは古い値を返します

var ref = firebase.database().ref('myObj').limitToFirst(100); 
ref.on("value", function(snap){ 
    console.log(snap.val()); 
}); 

このようにして、私は正しく注文する必要があるすべてのオブジェクトを取得します。しかし、いくつかのデータをフィルタリングするためにクエリを追加すると、元のものから注文が失われました。

var ref = firebase.database().ref('myObj').orderByChild('myChild').equalTo('myproperty').limitToFirst(100); 
ref.on("value", function(snap){ 
    console.log(snap.val()); 
}); 

この方法では、フィルタを適用しないときに得られるように、この方法で最新のデータを受信しません。

どうすれば解決できますか?

+0

あなたが最初にデータをフェッチすることはできません、その後、フィルタを適用しますか? –

+0

これは膨大な量のデータで、サーバー側で行うのが好きです。 – cor

+0

Firebaseリアルタイムデータベースでは不可能な2つのプロパティを注文/フィルタリングしようとしているようです。 http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase –

答えて

2
私はこれで何が起こるか実現

.ref('myObj').orderByChild('myChild').limitToFirst(100); 

orderByChild('myChild')は(下から)降順でJSONを読み込み、そのリストは、「再び照会」(昇順でlimitToFirst(100)で再び照会されていることです - 文字通りリストを再度照会するより効率的な方法で)もともと下にあったものが一番上にあります。Firebase JSONファイルの最下部から100レコードを取得します。

試してみることができます(tested with AngularFire2 - 注文の変更を確認するにはorderByChild('size')を削除してください)。

順序を元に戻すために、いくつかの方法:あなたが書いたように

まず道、単にLimitToLast()

他の方法にクエリを変更します

元に戻すパイプ:

<div *ngFor="let item of listObservable | async | reverse"> 

AngularFre2、あなたはRxjsのadvantigeを取ることができます:

this.stories = af.database.list('/myObj', { 
    query: { 
    limitToLast: 100 
    } 
}).map((array) => array.reverse()) as FirebaseListObservable<any[]>; 

または1つ、興味深い、CSSを経由して逆にする方法を:

#container{ 
    display: -webkit-flex; 
     display: -moz-flex; 
     display: -ms-flex; 
     display: -o-flex; 
     -webkit-flex-direction: column-reverse; 
     -moz-flex-direction: column-reverse; 
     -ms-flex-direction: column-reverse; 
     -o-flex-direction: column-reverse; 
} 
+0

良い見て、私はmondayで試してみましょう。乾杯! – cor

+1

'limitToFast'を' limitToFast'で変更しても動作しますが、これ以上何もする必要はありません。正しい方向を教えてくれてありがとう! – cor

+0

@cor - 私はちょうどこれが原因であることを認識しました。あなたは更新の回答を読むことができます。あなたが正しくないものを見つけたらコメントしてください –

関連する問題