2016-02-25 2 views
1

В firebase расчитана я прочитал о массиве: https://www.firebase.com/docs/web/guide/understanding-data.html#section-arrays-in-firebaseFirebase силы использовать карту, а не массив

особенно:

Однако, чтобы помочь разработчикам, хранящих массивы в Firebase базе данных, когда данные прочитайте с помощью val() или через REST api, если данные выглядят как массив, клиенты Firebase будут отображать его как массив. В частности, если все ключи являются целыми числами, а более половины ключей между 0 и максимальным ключом в объекте имеют непустые значения, тогда клиенты Firebase будут отображать его как массив. Эта последняя важна, чтобы иметь в виду.

Есть ли способ заставить firebase использовать только карту и никогда не преобразовывать данные в массив? Любая конфигурация?

В моем примере в firebase я получил структуру так:

{ "0": { 
    "drivers" : { 
    "12" : { 
     "latitude" : 50.076574, 
     "longitude" : 19.9209708, 
     "timestamp" : 1456311442329 
    }, 
    "13" : { 
     "latitude" : 50.0166148, 
     "longitude" : 20.9863258, 
     "timestamp" : 1456395866163 
    } 
    } 
} 
}, 
{ "1" : { 
    "drivers" : { 
    "10" : { 
     "driver_id" : 10, 
     "latitude" : 50.076574, 
     "longitude" : 19.9209708, 
     "timestamp" : 1456311442329 
    }, 
    "17" : { 
     "driver_id" : 17, 
     "latitude" : 50.0166148, 
     "longitude" : 20.9863258, 
     "timestamp" : 1456395866163 
    } 
    } 
} 
} 

И в Java Script я прочитал JSON как массив, потому что firebase умна и конвертировать мои данные в массив, но я ожидаю карты. Такое поведение для меня очень неустойчивое.

[ { 
     "drivers" : { 
     "12" : { 
      "latitude" : 50.076574, 
      "longitude" : 19.9209708, 
      "timestamp" : 1456311442329 
     }, 
     "13" : { 
      "latitude" : 50.0166148, 
      "longitude" : 20.9863258, 
      "timestamp" : 1456395866163 
     } 
     } 
    }, { 
     "drivers" : { 
     "10" : { 
      "driver_id" : 10, 
      "latitude" : 50.076574, 
      "longitude" : 19.9209708, 
      "timestamp" : 1456311442329 
     }, 
     "17" : { 
      "driver_id" : 17, 
      "latitude" : 50.0166148, 
      "longitude" : 20.9863258, 
      "timestamp" : 1456395866163 
     } 
     } 
    } ] 
+0

Можете ли вы также добавить код, который используете для чтения в данных? –

+0

Ohh Noo его мой foult i user $ firebaseArray, но теперь я перехожу на $ firebaseObject и работает нормально, извините – luckybastard

ответ

2

Самый простой способ никогда не получать массив - всегда использовать строки как ключи. Если ваши натуральные ключи являются числами, прикрепите их к строке.

E.g.

var words = ['zero', 'one', 'two', 'three']; 
words.forEach(function(word, index) { 
    ref.child('word_'+index).set(word); 
}); 

Таким образом, вы будете в конечном итоге с:

{ 
    "word_0": "zero", 
    "word_1": "one", 
    "word_2": "two", 
    "word_3": "three" 
} 

И Firebase никогда не будет принуждать его в массив.

Смежные вопросы