根据Firebase中的子键值排序

时间:2019-03-04 01:59:16

标签: firebase firebase-realtime-database

我正在尝试根据子键的值对Firebase中的对象列表进行排序,但似乎失败了。我使用了过滤器ref.orderByChild('sort_order'),但是返回的数据不是排序格式。给出下面的节点结构,有人可以帮助我指出我哪里出错了吗?

"widgets":{
  "fruits":{
    "sort_order":"2",
    "data":[{
    "thread_id":"201902001",
    "source_port":"Shanghai",
    "source_port_latitude":"31.218399",
    "source_port_longitude":"121.434563",
    "destination_port":"Singapore",
    "destination_port_latitude":"1.32046",
    "destination_port_longitude":"103.72042",
    "created_on":"2019-02-01 01:02:03"
  }]
},
  "vegetables":{
    "sort_order":"1",
    "data":[{
      "thread_id":"201902004",
      "source_port":"Jebel Ali",
      "source_port_latitude":"24.99626",
      "source_port_longitude":"55.12536",
      "destination_port":"Port Klang",
      "destination_port_latitude":"2.999852",
      "destination_port_longitude":"101.39283",
      "created_on":"2019-02-04 10:11:12"
    }]
  }
}

1 个答案:

答案 0 :(得分:0)

我无法用您的数据重现该问题。有关我的工作代码,请参见https://jsbin.com/zaguyad/edit?js,console

最可能引起问题的原因是如何处理查询返回的数据。维护订购信息的正确方法是使用DataSnapshot.forEach()

ref.child("widgets").orderByChild('sort_order')
  .once('value', snapshot => {
    snapshot.forEach(child => {
      console.log(child.key);
    })
  })