Node.js + Firebase orderByChild no funciona

Estoy tratando de averiguar este orden nested y nada de lo que haga funcionará.

Aquí hay una muestra de la estructura de datos que estoy tratando de ordenar:

{ "-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" } } } 

De acuerdo con la documentación de base de firmas ( https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html ) puede hacer una “consulta de ruta profunda”. En mi caso, si quiero ordenar por orden debería poder hacer:

 .orderByChild("body/order") 

Pero esto no hace nada. No tiene efecto en el orden de los resultados. He intentado ordenar en fecha y hora también y ninguno funciona. Aquí está mi función de nodo completo. Esto devuelve los resultados, simplemente no ordenados:

 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()); }); }); 

¡Gracias!

Cuando solicita el valor de una consulta en Firebase, la instantánea resultante contiene las claves, los valores y la información de pedido para los hijos coincidentes.

Pero cuando luego lo convierte en un objeto de diccionario / matriz asociativa / JavaScript, la información de pedido se pierde ya que los objetos de JavaScript están intrínsecamente desordenados.

Para asegurarse de que puede acceder a los elementos coincidentes en el orden correcto, use el método DataSnapshot.forEach() incorporado:

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