Обновление данных в пределах уникального случайно сгенерированного идентификатора / ключа в базе данных с использованием HTML - PullRequest
0 голосов
/ 03 февраля 2019

function updateFirebase(){
    const fb=firebase.database().ref()
    //get field values
    author = document.getElementById('uname').value
    user_email = document.getElementById('umail').value
    data =  {author, user_email}
    //update database
    fb.child('Article/').update(data);
   }
  </script>

У меня проблема с кодом.Я хочу обновить данные внутри таблицы с именем «Статья».Статья генерирует элементы с уникальным ключом / идентификатором, и каждый ключ имеет свой собственный контент.Допустим, я хочу иметь возможность редактировать «автора» или «заголовок», проблема в том, что у каждого из них есть случайно сгенерированный ключ / идентификатор, к которому я не могу получить доступ.например, что "-LS39kReBHrKGqNj7h_".Я могу сохранить данные только внутри дерева «Статья», но не могу изменить «автора» или «заголовок».Как мне обойти это, чтобы я мог изменить эти свойства?

Вот как выглядит моя база данных

1 Ответ

0 голосов
/ 03 февраля 2019

Зависит от того, есть ли у вас ссылка на запись во внешнем интерфейсе перед обновлением или нет (независимо от того, извлекли ли вы ее перед тем, как пытаться обновить).

Но, как правило, у вас есть два варианта

  1. Вы можете сохранить ссылку на ключ в виде поля «id» на объекте.Чтобы достичь этого, вам нужно выполнить двухэтапный процесс при создании записи на первом месте
// Creates a new record in DB and returns it to you. Now you can get the "key"
const newRecord = firebase.database().ref('TABLE_NAME_REF').push();

newRecord.set({
  id: newRecord.key
  ...
});

Это замечательно, если вы выбираете список записей на внешнем интерфейсе, а затем хотите обновить один изих.Тогда вы можете просто построить путь ссылки следующим образом

fb.child('Article/' + record.id ).update(data); // where record is the prefetched thing
Сначала вам нужно найти элемент на основе его полей.И как только у вас есть, вы можете обновить его прямо сейчас.Чтобы достичь этого, вы можете просто сделать что-то вроде:
firebase.database()
 .ref('TABLE_NAME_REF') // let's say 'Article'
 .orderByChild('RECORD_KEY') // Let's say 'author'
 .equalTo('KEY_VALUE') // let's say 'zoranm'
 .limitToFirst(1) 
 .once("value")
 .then(res => {
   // You need to loop, it always returns an array
   res.forEach(record => { 
     console.log(record.key); // Here you get access to the "key"
     fb.child('Article/' + record.key ).update(data); // This is your code pasted here
   })
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...