2016-11-02 18 views
2

私はこのネストされた順序を理解しようとしています。ここでNode.js + Firebase orderByChild not working

は私が注文しようとしているデータ構造のサンプルです:firebaseドキュメント(https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html)パー

{ 
    "-KV_Lrm_93Agm8kAuXql": { 
    "body": { 
     "Acceleration": "0.0", 
     "Altitude": "11", 
     "Battery": "12.7", 
     "Date": "2016/09/10", 
     "order": 1, 
     "time": "2016-10-19T20:26:32Z" 
    } 
    }, 
    "-KV_LuTfJ9VrKRHoRWuw": { 
    "body": { 
     "Acceleration": "0.0", 
     "Altitude": "11", 
     "Battery": "12.7", 
     "Date": "2016/09/10", 
     "order": 5, 
     "time": "2016-10-21T20:26:32Z" 
    } 
    }, 
    "-KV_Lx9VABuEB8D3I-i1": { 
    "body": { 
     "Acceleration": "0.0", 
     "Altitude": "11", 
     "Battery": "12.7", 
     "Date": "2016/09/10", 
     "order": 2, 
     "time": "2016-10-01T20:26:32Z" 
    } 
    }, 
    "-KV_LzQOM3rHEKQuwyHQ": { 
    "body": { 
     "Acceleration": "0.0", 
     "Altitude": "11", 
     "Battery": "12.7", 
     "Date": "2016/09/10", 
     "order": 10, 
     "time": "2016-09-01T20:26:32Z" 
    } 
    }, 
    "-KV_M0fdznAbKanHoY91": { 
    "body": { 
     "Acceleration": "0.0", 
     "Altitude": "11", 
     "Battery": "12.7", 
     "Date": "2016/09/10", 
     "order": 6, 
     "time": "2016-09-20T20:26:32Z" 
    } 
    } 
} 

あなたが「深いパスクエリ」を行うことができます。私の場合は私がためでソートしたい場合は、私が行うことができるはず:

.orderByChild("body/order") 

しかし、これは何もしません。結果の順序付けには影響しません。私は日付と時刻、どちらの仕事も注文しないようにしました。ここに私の完全なノード機能があります。結果は返されません。

app.get('/api/xirgo-data', function(req, res) 
{ 
    var ref = db.ref("xirgo"); 
    ref 
    .orderByChild("body/order") 
    .on("value", function(snap) { 
     return res.json(snap.val()); 
    }); 
}); 

ありがとうございます!

答えて

6

Firebaseでクエリの値を要求すると、結果のスナップショットには、一致する子のキー、値、および注文情報が含まれます。

しかし、これを辞書/連想配列/ JavaScriptオブジェクトに変換すると、JavaScriptオブジェクトが本質的に順序付けられていないので、順序情報が失われます。あなたは組み込みのDataSnapshot.forEach()方法を使用、正しい順序に一致する項目にアクセスできるようにするには

var ref = db.ref("xirgo"); 
ref 
.orderByChild("body/order") 
.on("value", function(snapshot) { 
    snapshot.forEach(function(child) { 
     console.log(child.key+': '+child.val()); 
    }); 
}); 
+0

これは素晴らしいですが、ありがとう! – Jesse

+0

完璧な答え。 – Tarun