我有跟随单个子数据结构,并希望按子属性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());
});
看来对象密钥正在返回数据。如何确保按rating
命令退回?
答案 0 :(得分:6)
当您为查询请求value
事件时,Firebase会返回包含所有子项及其订单信息的快照。但是当您请求该快照的val()
时,子项将转换为JOSN对象,并且订购信息将丢失。
解决方案是使用快照来导航孩子,只有在你按照正确的顺序获得它们后才能转换为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());
});
});