Как обновить последнюю запись из дерева Firebase-Database?

Я хотел бы обновить (или синхронизировать) последнюю запись из дерева в моей базе данных Firebase.

Структура выглядит следующим образом:

Я хочу отслеживать только последнюю запись, не извлекая все записи, как это делает 'EventTypeChildAdded'.
Однако я действительно хочу наблюдать за самой последней записью, поэтому я хотел бы вызывать функцию всякий раз, когда появляется новая 'последняя' запись, поэтому, когда ребенок будет добавлен.

Я уже нашел этот кусок кода.

(DatabaseRef).queryOrderedByKey().queryLimitedToLast(1).observeSingleEventOfType

Но это, кажется, не соблюдает последнюю запись.


person j3141592653589793238    schedule 08.06.2018    source источник


Ответы (1)


Я думаю, вы на неправильном пути. childadded делает именно то, что вам нужно. Проверьте документ еще раз. https://firebase.google.com/docs/database/admin/retrieve-data#child-added

В первый раз childadded извлекает весь список, а затем только элемент, только что добавленный в список.

Добавлен ребенок

Событие child_added обычно используется при извлечении списка элементов из базы данных. В отличие от значения, которое возвращает все содержимое местоположения, child_added запускается один раз для каждого существующего дочернего элемента, а затем снова каждый раз, когда новый дочерний элемент добавляется к указанному пути. Обратному вызову события передается снимок, содержащий данные нового дочернего элемента. В целях упорядочения ему также передается второй аргумент, содержащий ключ предыдущего дочернего элемента.

EDIT: чтобы ограничить дочерний добавленный запрос последним элементом:

ref.queryLimited(toLast: 1).observe(.childAdded) { (snapshot) in
// parse snapshot to get the last item
person ugur    schedule 08.06.2018
comment
Да, я это знаю, поэтому и задаю этот вопрос. Как я могу получить только последний элемент (и обновить его), не получая все данные один раз? @угубоз - person j3141592653589793238; 08.06.2018
comment
Так почему бы вам не поместить свою триггерную функцию в childadded? я не понял что ты спрашиваешь - person ugur; 08.06.2018
comment
Потому что childAdded также будет извлекать все данные один раз. Я не хочу этого. Я хочу получить только последнюю запись. ...child_added is triggered once for each existing child... - person j3141592653589793238; 08.06.2018
comment
может быть, вы не можете обработать начальный случай с флагом? Тогда он будет работать так, как вы ожидали - person ugur; 08.06.2018
comment
Это сработает, я просто не хотел получать все записи, потому что их может быть довольно много. В любом случае, я думаю, что мне нужно использовать childAdded. Спасибо - person j3141592653589793238; 08.06.2018
comment
ага ок теперь я понял. тогда вам следует попробовать ref.queryLimited(toLast: 1).observe(.childAdded) { (моментальный снимок) ... вместо наблюдения за одним событием - person ugur; 08.06.2018
comment
для javascript-эквивалента этого вопроса см. - person ugur; 08.06.2018
comment
Да, ты классный, спасибо большое. Если бы вы могли добавить это к своему ответу, я бы отметил его как решенный. - person j3141592653589793238; 10.06.2018
comment
Для ИОС? как выяснится? - person Krishna kushwaha; 29.10.2018