Firebase orderByKey() противоречивый порядок ключей
Есть некоторые бизнес-требования, которым я должен соответствовать, и мои ключи частично создаются веб-интерфейсом Firebase (например, -JzuZoAtZ9fKY9z3GbEU) частично вручную (например, 304810429574385)
Версия Firebase, которую я использую: "version": "2.2.7"
я использую orderByKey()
запрос для сортировки предметов и как указывает документация:
- Сначала идут дочерние элементы с ключом, который может быть проанализирован как 32-разрядное целое число, отсортированные по возрастанию.
- Далее следуют дети со строковым значением в качестве ключа, отсортированные лексикографически в порядке возрастания.
Может ли кто-нибудь дать мне некоторое представление о том, почему ключи, сгенерированные в Firebase, не обрабатываются как обычные строки, а их расположение кажется непредсказуемым, как если бы они были числами?
Примеры отсортированных ключей у меня есть для двух отдельных конечных точек:
// case no 1
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
// case no 2
222441849
225215973
225484186
-JzpekQUr7jRDHo5qk3D
Ссылки на случаи данных Firebase ПЕРВЫЙ и ВТОРОЙ
JSfiddle orderByKey()
использование.
Предыдущий вывод был напечатан с использованием:
var keys = [];
fireRef.orderByKey().on('child_added',function(snap){
keys.push(snap.key());
});
То же самое при получении данных через REST API, при заказе с orderBy="$key"
:
GET https://my_app.firebaseio.com/one/two/three.json?orderBy="$key"&auth=superSecret
То же самое при использовании angularfire:
$scope.items = $firebaseArray(fireRef.orderByKey());
1 ответ
Числа в вашем случае 1 больше, чем вписывается в 32-разрядное целое число: 2147483647
Более очевидно, что произойдет, если вы объедините два списка:
222441849
225215973
225484186
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
Числа перед идентификаторами push (клавиши, начинающиеся с -J
) упорядочены по числовым значениям. Числа после push-идентификаторов не помещаются в 32-разрядное целое число и, следовательно, (как описано в цитируемом документе) упорядочены по их лексикографическому значению.