Firebase orderByChild意外的结果

我有以下的单一儿童数据结构,并希望按子女财产rating检索订单:

样本数据结构

 players: { 360368: { name: "Joe, Blogs", rating: 1853 }, 400017: { name: "Bob, Dylan", rating: 2597, }, 430013: { name: "James, Dean", rating: 2152, } } 

检索代码

 let ref = this.fb.ref('players'); ref.orderByChild("rating").limitToFirst(100).once("value", function(snapshot) { console.log(snapshot.val()); }); 

返回的结果似乎没有逻辑数字顺序。

最后,当我运行下面的查询时,我得到了我期望的结果(看到10名玩家的评分为2597):

 let ref = this.fb.ref('players'); ref.orderByChild("rating").equal(2597).limitToFirst(10).once("value", function(snapshot) { console.log(snapshot.val()); }); 

UPDATE

看来数据正在被对象键返回。 我怎样才能确保这是返回,按ratingsorting?

当您为查询请求value事件时,Firebase会返回包含所有子级和其订单信息的快照。 但是,当您请求该快照的val()时,这些孩子将转换为JOSN对象,并且订购信息将丢失。

解决scheme是使用快照导航子项,只有按照正确的顺序才能将其转换为JSON:

 let ref = this.fb.ref('players'); ref.orderByChild("rating").equal(2597).limitToFirst(10).once("value", function(snapshot) { snapshot.forEach(function(childSnapshot) { console.log(childSnapshot.val()); }); });