Firebase orderByKey() 键的顺序不一致
Firebase orderByKey() inconsistent ordering of keys
我必须满足一些业务要求,我的密钥部分由 Firebase web api(例如 -JzuZoAtZ9fKY9z3GbEU)部分手动创建(例如 304810429574385)
我使用的 Firebase 版本:"version": "2.2.7"
我正在使用 orderByKey()
查询对项目进行排序,并且 documentation points out:
- Children with a key that can be parsed as a 32-bit integer come first, sorted in ascending order.
- Children with a string value as their key come next, sorted lexicographically in ascending order.
谁能告诉我为什么 firebase 生成的键不像普通字符串那样对待,而且它们的位置似乎像数字一样不可预测?
我为两个单独的端点排序的键示例:
// case no 1
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
// case no 2
222441849
225215973
225484186
-JzpekQUr7jRDHo5qk3D
Firebase 数据案例链接FIRSTand SECOND
之前的输出是使用以下方法打印的:
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 中的数字大于 what fits in a 32 bit integer:2147483647
如果将两个列表放在一起会发生什么更明显:
222441849
225215973
225484186
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
push ids前的数字(-J
开头的键)按照数值顺序排列。推送 ID 后的数字不适合 32 位整数,因此(如您引用的文档中所述)为 ordered by their lexicographic value.
我必须满足一些业务要求,我的密钥部分由 Firebase web api(例如 -JzuZoAtZ9fKY9z3GbEU)部分手动创建(例如 304810429574385)
我使用的 Firebase 版本:"version": "2.2.7"
我正在使用 orderByKey()
查询对项目进行排序,并且 documentation points out:
- Children with a key that can be parsed as a 32-bit integer come first, sorted in ascending order.
- Children with a string value as their key come next, sorted lexicographically in ascending order.
谁能告诉我为什么 firebase 生成的键不像普通字符串那样对待,而且它们的位置似乎像数字一样不可预测?
我为两个单独的端点排序的键示例:
// case no 1
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
// case no 2
222441849
225215973
225484186
-JzpekQUr7jRDHo5qk3D
Firebase 数据案例链接FIRSTand SECOND
之前的输出是使用以下方法打印的:
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 中的数字大于 what fits in a 32 bit integer:2147483647
如果将两个列表放在一起会发生什么更明显:
222441849
225215973
225484186
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
push ids前的数字(-J
开头的键)按照数值顺序排列。推送 ID 后的数字不适合 32 位整数,因此(如您引用的文档中所述)为 ordered by their lexicographic value.