在firebase实时数据库中按时间戳对数据进行排序



我已经将数据存储在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);

在查询中使用orderByChild('timestamp')时,Firebase会按照请求的顺序返回请求的子节点。每个子节点有三条信息:

  • 它的钥匙
  • 它的价值
  • 它相对于其他子节点的顺序

但是当您调用snapshot.val()时,它必须将该信息转换为JSON,该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);
});

最新更新