Firebaseで次のようなデータベースを作成しました。
次に、RESTクライアントに移動して、次のクエリを発行します。
https://movielens3.firebaseio.com/movieLens/users.json?orderBy="age"&startAt=25&print=pretty
それは私にエラーを与えます:
"error": "Index not defined, add ".indexOn": "age", for path "/movieLens/users", to the rules"
だから私はルールセクションに行き、このルールを定義します:
{
"rules": {
"users" : {
".indexOn": ["age", "gender", "occupation", "zipCode"]
},
".read": true,
".write": true
}
}
しかし、まだ同じエラーが発生します。
/users
のインデックスを定義しています。ツリーのルートのすぐ下に子ノードusers
がないため、これらのインデックスは空になります。
/movieLens/users
をクエリしているので、ここでインデックスを定義する必要があります。
{
"rules": {
"movieLens": {
"users" : {
".indexOn": ["age", "gender", "occupation", "zipCode"]
},
".read": true,
".write": true
}
}
}
コメントの更新:
ユーザーの年齢を文字列として保存しているため、それらを数値としてフィルタリングすることはできません。解決策は、データを修正して数値として保存することです。
しかし、当面の間、このクエリはある程度機能します。
https://movielens3.firebaseio.com/movieLens/users.json?orderBy="age"&equalTo="35"
JavaScriptの場合:
ref
.orderByChild('age')
.startAt('35')
.limitToFirst(3)
.once('value', function(s) {
console.log(JSON.stringify(s.val(), null, ' '));
}, function(error) {
if(error) console.error(error);
})
「やや」とは、数値ではなく字句ソートを行うことです。実際のソリューションのデータを修正します。
また、データを配列として保存することにより、Firebaseのベストプラクティスを無視していることに注意してください。 REST APIですでに問題が発生していたため、print=pretty
を削除しました。IhighlyJavaScript開発者向けのFirebaseプログラミングガイド を最初から最後まで読んで、そこに記載されているアドバイスに従ってください。今から数時間で、何時間もかかる問題を防ぐことができます。