我的数据库如下所示:
我需要更新division_name
为3的index_num
。
我尝试了以下代码,但它没有用 -
var division_index_found="3";
var division_name_given="new div";
var query_update=firebase.database().ref("/divisions")
.orderByChild('index_num').equalTo(division_index_found);
query_update.once("child_added", function(snapshot) {
snapshot.ref.update({ division_name: division_name_given });
});
这里采用什么方法?
EDIT1: 我在chrome控制台中收到警告:
FIREBASE警告:使用未指定的索引。考虑添加" .indexOn":" index_num" at / division to your security rules以获得更好的性能
EDIT2:
在firebase数据库中,districts
节点(?)如下所示:
"districts" : {
"-KbVYCSO8wrMoXD3vL81" : {
"district_name" : "Rangpur",
"division_index" : "3",
"index_num" : 2
},
"-KbVYHgbWMDMtGsnmvei" : {
"district_name" : "jessore",
"division_index" : "3",
"index_num" : 3
},
"-KbVYKtSnPMFDkx9z0cU" : {
"district_name" : "district 1",
"division_index" : "3",
"index_num" : 4
}
}
现在,我想更新某个district_name
和index_num
的{{1}}。我使用以下代码:
division_index
但控制台显示:
var district_index="3";
var division_index="3"
var district_index_parsed = parseInt(district_index);
var query_update=firebase.database().ref("/districts")
.orderByChild('index_num').equalTo(district_index_parsed);
query_update.once("child_added", function(snapshot) {
snapshot.forEach(function(snapshot_indiv){
if(parseInt(snapshot_indiv.division_index)==parseInt(division_index)){
var district_name_again="new district name";
snapshot_indiv.ref.update({ district_name: district_name_again },function(error){
});
}// end of if division_index compare
});// end of forEach
});// end of query_update once
最终提示我的Uncaught Error: No index defined for index_num
at je.get (firebase-database.js:94)
...
...
at edit_districts.php:359
...
文件中的以下代码行:
edit_districts.php
在snapshot.forEach(function(snapshot_indiv){
部分内。query_update.once
方法似乎解决了这个问题。
安全规则定义为
forEach
如何摆脱错误以更新数据库?
答案 0 :(得分:0)
您需要为Firebase数据库安全规则添加索引。我建议您阅读Firebase documentation on security rules,特别是section on indexes。
从文档中可以看到第一个样本:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}
修改为您的数据结构,它看起来像这样:
{
"rules": {
"divisions": {
".indexOn": "index_num"
}
}
}