这是我的firebase,我使用的是实时数据库
我想按点订购用户名并列出反应原生的前10名高点用户,但我尝试了firebase订单方法而我不能。
我试过这样的:
let ref = firebase.database().ref('/users');
ref
.orderByChild('TotalPoint')
.limitToFirst(10)
.on('value', function(snapshot) { console.log(snapshot.val()); });
但是不行
我应该使用什么firebase方法?
您的代码有两个问题:
Point/TotalPoint
上订购,因为这是您要为每个用户订购的价值的路径。val()
时项目的顺序会丢失(因为未定义JavaScript对象中属性的顺序)。然后整个片段变为:
let ref = firebase.database().ref('/users');
ref
.orderByChild('Point/TotalPoint')
.limitToFirst(10)
.on('value', function(snapshot) {
snapshot.forEach(function(user) {
console.log(user.val());
});
});
我认为你应该使用这些方法
.orderByChild("TotalPoint")
所以你根据“点”进行查询
.limitToFirst("10")
设置从有序结果列表的开头返回的最大项数等于10。
我解决了这个方法,改变了我的firebase规则;
{
"rules":{
"users":{
"$uid":{
".read":"$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
}
}
改为这个=>
{
"rules":{
".read":true,
"users":{
"$uid":{
".read":"$uid === auth.uid",
".write": "$uid === auth.uid"
},
},
}
}
并尝试@Frank van Puffelen分享方法是工作谢谢