firebase web - 更新找到特定值的数据库

时间:2017-01-26 12:23:20

标签: firebase firebase-realtime-database updates

我的数据库如下所示:

enter image description here

我需要更新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_nameindex_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

如何摆脱错误以更新数据库?

1 个答案:

答案 0 :(得分:0)

您需要为Firebase数据库安全规则添加索引。我建议您阅读Firebase documentation on security rules,特别是section on indexes

从文档中可以看到第一个样本:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

修改为您的数据结构,它看起来像这样:

{
  "rules": {
    "divisions": {
      ".indexOn": "index_num"
    }
  }
}