我必须调整一些业务要求,我的密钥部分由Firebase web api(例如-JzuZoAtZ9fKY9z3GbEU)手动创建(例如304810429574385)
我使用的Firebase版本:"version": "2.2.7"
我使用orderByKey()
查询对项目进行排序,并使用documentation points out:
- 具有可以解析为32位整数的键的子项首先按升序排序。
- 接下来按字符串值作为键的儿童按字典顺序按升序排序。
醇>
有人能给我一些见解,为什么firebase生成的密钥不像普通字符串一样处理,它们的位置似乎不可预测,好像它们是数字一样?
我对两个不同端点的排序键示例:
// case no 1
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
// case no 2
222441849
225215973
225484186
-JzpekQUr7jRDHo5qk3D
的链接
以前的输出使用:
打印var keys = [];
fireRef.orderByKey().on('child_added',function(snap){
keys.push(snap.key());
});
使用orderBy="$key"
GET https://my_app.firebaseio.com/one/two/three.json?orderBy="$key"&auth=superSecret
如果使用angularfire,则相同:
$scope.items = $firebaseArray(fireRef.orderByKey());
答案 0 :(得分:2)
您案例1中的数字大于what fits in a 32 bit integer:2147483647
如果将两个列表放在一起会发生什么更明显:
222441849
225215973
225484186
-JzLOQGFCw6ZwHnQZPFR
-JzuZoAtZ9fKY9z3GbEU
163467300371184
222032364474376
386146869432
推送ID之前的数字(以-J
开头的键)按其数值排序。 push id之后的数字不适合32位整数,因此(如您引用的文档中所述)为ordered by their lexicographic value。