База данных Firebase в реальном времени с Unity. Хотите получать только последние добавленные дочерние элементы в указанном узле c. (Не берите старые) - PullRequest
0 голосов
/ 03 марта 2020

Я использую базу данных Firebase Realtime для сохранения некоторых ссылок под родительским именем - Links.

Допустим, есть 5 ссылок, и мое приложение их загрузило. И через несколько дней я добавил еще 5. Как сделать так, чтобы мое приложение проверяло только последние 5 добавленных, а не предыдущие?

Я использую OnValueChanged, ChildAdded, Child Removed et c. Ничто не работает так, как я хочу. Он проверяет всех дочерних элементов в ссылках, что приводит к потере пропускной способности.

Я специально хочу, чтобы мое приложение получало только обновленные или новые.

Я использую его с Unity. Любые предложения, пожалуйста?

1 Ответ

0 голосов
/ 03 марта 2020

Создайте ссылку для каждой ссылки и pu sh их по отдельности

Метод Firebase Push для создания основанного на времени ключа для каждой ссылки следующим образом:

var linksParent = Firebase.Database.FirebaseDatabase.GetReference("linksParent");

var newLinks = new List<string>(){"somelink","otherLink","anotherLink","yetAnother", "lastLink"};

foreach(var link in links)
{
   var linkRef = linksParent.Push(); // Generates a time based key for this reference.
   linkRef.SetValueAsync(link);
}

Для извлечения последние 5 ссылок, так как они хранятся в базе данных лексикографически к моменту их добавления.

var linksParent = Firebase.Database.FirebaseDatabase.GetReference("linksParent");
// Retrieve the most recent 5 links, if there's less than 5 in the list, it'll fetch them all.
linksParent.LimitToLast(5).GetValueAsync().ContinueWith(task=>
{
   if(task.IsCompleted)
   {
      // Yes there are links and we fetched the latest.
      if(task.Result.Exists) 
      {
          // Do something with your links at task.Result.
      }
   }
});

Вы также можете прослушивать список ссылок и извлекать последние 5 ссылок каждый раз, когда список изменяется

var linksParent = Firebase.Database.FirebaseDatabase.GetReference("linksParent");
linksParent.LimitToLast(5).ValueChanged += OnLinksChanged;

void HandleValueChanged(object sender, ValueChangedEventArgs args) 
{
      if (args.DatabaseError != null) 
      {
        Debug.LogError(args.DatabaseError.Message);
        return;
      }
      // Do something with the links in args.Snapshot
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...