各レコードのフィールドの1つでソートされたレコードのリストを取得しようとしていますが、ページ内のデータを取得できるようにしたいと考えています。子による注文時にstartAt()を使用するページ分割
がFirebase documentationによれば、reference.startAt()
方法は、オプション2のパラメータがあります
The child key to start at. This argument is only allowed if ordering by child, value, or priority.
まずオフ、ここでデータは次のとおり
{
"products" : {
"-KlsqFgVWwUrA-j0VsZS" : {
"name" : "Product 4",
"price" : 666
},
"-Klst-cLSckuwAuNAJF8" : {
"name" : "Product 1",
"price" : 100
},
"-Klst7IINdt8YeMmauRz" : {
"name" : "Product 2",
"price" : 50
},
"-Klst9KfM2QWp8kXrOlR" : {
"name" : "Product 6",
"price" : 30
},
"-KlstB51ap1L2tcK8cL6" : {
"name" : "Product 5",
"price" : 99
},
"-KlstDR5cCayGH0XKtZ0" : {
"name" : "Product 3",
"price" : 500
}
}
}
そしてここでは、コードされページ1(最低価格商品+第2最低価格+第3最低価格):
(私はFirebase JS SDK 4.1.1を使用しています)
'use strict';
var firebase = require('firebase');
firebase.initializeApp({
apiKey: "your-api-key",
authDomain: "your-firebase-domain",
databaseURL: "https://your-db.firebaseio.com",
projectId: "your-project",
storageBucket: "your-bucket.appspot.com",
messagingSenderId: "your-sender-id"
})
firebase.database().ref('products')
.orderByChild('price')
.limitToFirst(3)
.on('child_added', function (snapshot) {
var key = snapshot.key;
var data = snapshot.val();
console.log(key + ': ' + JSON.stringify(data))
})
出力:
TJ:データベースtjwoonの$ノードtest.js
-Klst9KfM2QWp8kXrOlR: {"name":"Product 6","price":30}
-Klst7IINdt8YeMmauRz: {"name":"Product 2","price":50}
-KlstB51ap1L2tcK8cL6: {"name":"Product 5","price":99}
2ページは第三最低でなければなりません、第4位の最低価格、第5位の最低価格の商品で、私のコードではさらに1行が必要です。
出力:
TJ:database tjwoon$ node test.js
-Klst9KfM2QWp8kXrOlR: {"name":"Product 6","price":30}
-Klst7IINdt8YeMmauRz: {"name":"Product 2","price":50}
-KlstB51ap1L2tcK8cL6: {"name":"Product 5","price":99}
問題は、それが再び1ページを返しているということです。ドキュメントが正しい場合、結果はキー-KlstB51ap1L2tcK8cL6
のレコードから開始されます。
価格フィールドに.indexOn
ルールを追加しようとしましたが、結果は同じです。
私はorderByChild()
行を削除すると、結果が与えられたキーから起動しますが、もちろんソートが間違っている、プラスそれはドキュメントに反し振る舞う...
私はこれらの他のスタックオーバーフローの記事を見つけました
- Firebase orderByChild with startAt()'s second argument w/ pagination not odering
- (私はここにリンクを含めるために十分な評判を持っていない以下のコメントを参照。) :同じ問題を記述しています
しかし、これらの質問に対する回答はなく、回答はほとんどありません。 Githubリポジトリには、検索用語startat
と一致する問題はありません。
誰かが同じ問題に直面していますか?この問題は、並べ替えられた方法で並べ替えられたリストを取得することが不可能になります...
第2回StackOverflow質問:https://stackoverflow.com/questions/36779947/firebase-querying-when-combining-orderbychild-startat-and-limittofirst?rq=1 – tjwoon