(Javascript) Доступ к последнему элементу из списка в Firebase RealtimeDatabase - PullRequest
0 голосов
/ 07 мая 2018

Я столкнулся с проблемой, решение которой не знаю. В базе данных Firebase RealtimeDatabase я создал список строк через ref.push(); Теперь мне нужно получить доступ к последнему объекту, который я создал, через ref.push();. Поскольку мне нужно получить к нему доступ в другом случае, я не могу получить ключ новой ссылки непосредственно из функции.

Каким будет правильный способ получить последний пункт такого списка? Я возился с разными способами (то есть обращался к нему, как к обычному массиву, а затем захватывал последний элемент этого массива), но пока ничего не получалось.

Я был бы очень рад, если бы кто-нибудь помог мне с этим.

EDIT:

Соответствующая часть базы данных выглядит так:

relevant_part

Я создал список в другой функции с помощью вызовов

var newRef = admin.database().ref(`PATH/TO/LIST`).push();
newRef.set("someString");

И поскольку я сгенерировал элементы более ранней версии, я не могу просто передать newRef функции, в которой я нуждаюсь, для доступа к элементу.

1 Ответ

0 голосов
/ 07 мая 2018

Сделайте следующее:

firebase.database().ref('PATH/TO/LIST').limitToLast(1).once('value')
.then(function(snapshot) {
     snapshot.forEach(function(childSnapshot) {
         console.log(childSnapshot.val());
     });
});

Два замечания:

  1. «Уникальный ключ, генерируемый push (), упорядочен по текущему времени, поэтому результирующий список элементов будет отсортирован в хронологическом порядке», как объяснено в документе: https://firebase.google.com/docs/reference/js/firebase.database.Reference#push. Таким образом, ваши элементы отсортированы в хронологическом порядке.
  2. Вы должны циклически обработать результат за один раз, потому что метод limitToLast() используется при построении query, который всегда возвращает «набор записей» (т. Е. DataSnapshot s для подмножества данных, которое соответствует ваш запрос), даже если результатом запроса является только один элемент.

Редактировать после вашего комментария:

var ref = firebase.database().ref('PATH/TO/LIST');

ref.limitToLast(1).once('value')
.then(function(snapshot) {
    var itemKey;
    snapshot.forEach(function(childSnapshot) {
       itemKey = childSnapshot.key;
       console.log(itemKey);
    });

    return ref.child(itemKey).set('someString3NEW');

})
.catch(function(error) {
  console.log(error);
});

Вы получаете ключ узла, который хотите изменить (с тем же запросом, что и выше), и используете метод set() для изменения его значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...