Firebase orderByKey() 键的顺序不一致

Firebase orderByKey() inconsistent ordering of keys

我必须满足一些业务要求,我的密钥部分由 Firebase web api(例如 -JzuZoAtZ9fKY9z3GbEU)部分手动创建(例如 304810429574385)

我使用的 Firebase 版本:"version": "2.2.7"

我正在使用 orderByKey() 查询对项目进行排序,并且 documentation points out:

  1. Children with a key that can be parsed as a 32-bit integer come first, sorted in ascending order.
  2. 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

JSfiddle orderByKey() usage.

之前的输出是使用以下方法打印的:

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 integer2147483647

如果将两个列表放在一起会发生什么更明显:

222441849
225215973
225484186
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432

push ids前的数字(-J开头的键)按照数值顺序排列。推送 ID 后的数字不适合 32 位整数,因此(如您引用的文档中所述)为 ordered by their lexicographic value.