Firebase orderByKey()键的顺序不一致

时间:2015-09-23 14:51:53

标签: javascript firebase angularfire

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

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

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

  
      
  1. 具有可以解析为32位整数的键的子项首先按升序排序。
  2.   
  3. 接下来按字符串值作为键的儿童按字典顺序按升序排序。
  4.   

有人能给我一些见解,为什么firebase生成的密钥不像普通字符串一样处理,它们的位置似乎不可预测,好像它们是数字一样?

我对两个不同端点的排序键示例:

// case no 1
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432

// case no 2
222441849
225215973
225484186
-JzpekQUr7jRDHo5qk3D

指向Firebase数据案例FIRSTSECOND

的链接

JSfiddle orderByKey() usage.

以前的输出使用:

打印
var keys = [];
fireRef.orderByKey().on('child_added',function(snap){
    keys.push(snap.key());
});

使用orderBy="$key"

订购时,通过REST API获取数据时的情况相同
GET https://my_app.firebaseio.com/one/two/three.json?orderBy="$key"&auth=superSecret

如果使用angularfire,则相同:

$scope.items = $firebaseArray(fireRef.orderByKey());

1 个答案:

答案 0 :(得分:2)

您案例1中的数字大于what fits in a 32 bit integer2147483647

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

222441849
225215973
225484186
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432

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