Сортировать данные по отметке времени в базе данных реального времени Firebase - PullRequest
0 голосов
/ 25 марта 2020

Я сохранил данные в базе данных Firebase в реальном времени, как показано ниже:

{
  "orders" : [ null, {
    "res_name" : "order test",
    "res_phone" : "1234567890",
    "timestamp" : 1585123988381
  }, {
    "res_name" : "tesst restaurant",
    "res_phone" : "987654321",
    "timestamp" : 1585124001850
  }, {
    "res_name" : "ppp",
    "res_phone" : "9856847758",
    "timestamp" : 1585124624718
  } ]
}

Теперь я хочу отсортировать данные по значению временной метки в порядке убывания. Как это можно сделать?

Я делаю ниже, чтобы отсортировать данные, но это не работает.

firebase.database().ref('orders').orderByChild('timestamp').on('value', function(snapshot) {
    var value = snapshot.val();
    var htmls = [];
    $.each(value, function(index, value){

      if(value){

         htmls.push('<tr><td>'+ value.res_name +'</td><td>'+ value.res_phone +'</td><td>'+ value.timestamp +'</td></tr>')
      lastIndex = index;
    });
    $('#tblId').html(htmls);

1 Ответ

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

Когда вы используете orderByChild('timestamp') в запросе, Firebase возвращает дочерние узлы, которые вы запросили, в том порядке, в котором вы их запрашивали. Он имеет три элемента информации для каждого дочернего узла:

  • его ключ.
  • его значение.
  • его порядок относительно других дочерних узлов.

Но когда вы затем вызываете snapshot.val(), он должен преобразовать эту информацию в JSON, который имеет место только для ключей и значения. Поэтому в этот момент информация о заказе отбрасывается.

Чтобы обработать дочерние элементы в том порядке, в котором вы их запросили, используйте snapshot.forEach():

firebase.database().ref('orders').orderByChild('timestamp').on('value', function(snapshot) {
    var value = snapshot.val();
    var htmls = [];
    snapshot.forEach(function(child) {
        let value = child.val();
        htmls.push('<tr><td>'+ value.res_name +'</td><td>'+ value.res_phone +'</td><td>'+ value.timestamp +'</td></tr>')
    });
    $('#tblId').html(htmls);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...