2017-01-26 3 views
-1

Моя база данных выглядит следующим образом:firebase веб - обновление базы, где определенное значение найдено

enter image description here

мне нужно обновить division_name где index_num равно 3. я попытался следующий код, но он сделал не работает -

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: Я получаю предупреждение в хромированной консоли:

FIREBASE ПРЕДУПРЕЖДЕНИЕ: Использование неопределенного индекса. Рассмотрим добавление ".indexOn": "номер_индекса" в/подразделения к вашим правилам безопасности для лучшей производительности

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 и 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, кажется, создает проблему.

А правила безопасности определяются как

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null", 

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

     "districts": { 
     ".indexOn": "index_num" 
    }, 

    } 
} 

Как избавиться от ошибок, чтобы обновить базу данных?

+0

Что вы имеете в виду Что происходит? –

+0

@martinjakubik, без изменений найдено в базе данных –

+0

@martinjakubik, 'EDIT1' добавлено в OP –

ответ

0

Вам необходимо добавить индекс в правила безопасности базы данных Firebase. Я рекомендую прочитать Firebase documentation on security rules, в частности, section on indexes.

Из документации приходит этот первый образец:

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

Modified для вашей структуры данных, это будет выглядеть примерно так: «? Это не работает»

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

включает в себя решение использовать номер вместо строки для сравнения, чтобы он стал полным ответом. –

+0

Как добавить правило - путем ручного редактирования правил в разделе «правила»? –

+0

Взгляните на «EDIT2», всплывает новая проблема. –

Смежные вопросы