"error": "Index not defined, add ".indexOn"
"error": "Index not defined, add ".indexOn"
我在 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);
})
"somewhat" 是它进行词法排序,而不是数字排序。修复数据以获得真正的解决方案。
请注意,您还忽略了将数据存储为数组的 Firebase 最佳做法。这已经在 REST API 中给我带来了问题,这就是我放弃 print=pretty
的原因。我 强烈 建议您从头到尾阅读 Firebase programming guide for JavaScript developers 并遵循其中的建议。现在花费的几个小时,将避免许多小时的问题。
我在 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);
})
"somewhat" 是它进行词法排序,而不是数字排序。修复数据以获得真正的解决方案。
请注意,您还忽略了将数据存储为数组的 Firebase 最佳做法。这已经在 REST API 中给我带来了问题,这就是我放弃 print=pretty
的原因。我 强烈 建议您从头到尾阅读 Firebase programming guide for JavaScript developers 并遵循其中的建议。现在花费的几个小时,将避免许多小时的问题。