2017-12-18 148 views
0

如何獲取按日期字段值排序的數據?我想根據他們的開始現在()的字段值顯示所有事件?我不認爲這會很難,但我無法讓它正常工作。Firebase按日期排序的值從今天開始不起作用

我的火力點的數據是:

"events" : { 
     "-KwX5oG6TYNWWhLYC5rx" : { 
     "ends" : "2018-01-04T23:30:47.071Z", 
     "starts" : "2018-01-02T23:30:47.062Z", 
     "title" : "Event 1" 
     }, 
     "-L0Id2D34D2Sd2T5oyXX" : { 
     "ends" : "2017-12-27T23:30:39.566Z", 
     "starts" : "2017-12-26T23:30:39.552Z", 
     "title" : "Event 2" 
     } 
    } 

的代碼查詢火力數據:

const today = new Date().toISOString(); 
    const ref = FirebaseRef.child("events").orderByChild('starts').startAt(today); 

    return ref.on('value', (snapshot) => { 
    const events = snapshot.val() || {}; 

    // DO SOMETHING 
    }); 

我試圖存儲數據Unix時間戳以及代替ISO字符串,仍然沒有奏效。

+0

有什麼不好的結果,當你運行該代碼? –

+0

排序按升序排列。看起來你正在通過「今天」,除非你有將來的日子,否則它將不會返回。要降序排列,您需要獲取所有值並將其排序爲JavaScript函數。 – SynchroDynamic

+0

@FrankvanPuffelen我看到的是一個沒有排序的列表。事件沒有按照降序和升序顯示。 – partizan

回答

1

最有可能的問題是由於您對查詢結果做了snapshot.val()的事實。當您從Firebase數據庫請求有序數據時,您會得到三件事:密鑰,值和項目順序。

當您在快照上調用val()時,將返回該值的JSON表示形式,該表示形式僅具有鍵和值的空間。由於JSON對象中的屬性順序未定義,因此結果的順序未定義(儘管大多數瀏覽器按鍵顯示它們)。

爲了解決此問題,使用Snapshot.forEach()遍歷結果的快照:

return ref.on('value', (snapshot) => { 
    var events = []; 
    snapshot.forEach((child) => { 
    events.push(child.val()); 
    }); 
    console.log(events); 
}); 
+0

看起來像這樣!我發現一個小的語法錯誤,'=>'缺失,即(孩子)=> {}等等。謝謝弗蘭克。 – partizan

+0

感謝您的支持!本週我一直在用我的胖箭頭sl sl。 :-) –