有没有办法从firebase获取这样的随机记录:
{
"-JbmopNnshefBT2nS2S7" : {
"dislike" : 0,
"like" : 0,
"post" : "First post."
},
"-JbmoudijnJjDBSXNQ8_" : {
"dislike" : 0,
"like" : 0,
"post" : "Second post."
}
}
我使用此代码来解决问题,但它会下载所有记录,因此如果数据库更大,我的应用程序将会非常缓慢地运行:
HTML code:
<div ng-controller="RandomCtrl">{{RandomPost.post}}</div>
JS代码:
var app=angular.module('App', ['firebase']);
app.controller('RandomCtrl', function($scope, $firebase){
var ref = new Firebase("https://ind.firebaseio.com/");
var sync=$firebase(ref);
$scope.messages = sync.$asArray();
$scope.GetRandomPost=function(){
return $scope.RandomPost=$scope.messages[Math.floor(Math.random()*$scope.messages.length)];
};
$scope.GetRandomPost();
});
答案 0 :(得分:2)
您可以将startAt与您自己的增量索引一起使用。例如,假设您的记录中有索引(0到n)。
执行此查询:orderByChild(&#34; index&#34;)。startAt(rint).limitToFirst(1);
参见代码snippit:
var rint = Math.floor((Math.random() * 10)) // you have 10 records
var query = ref.orderByChild("index").startAt(rint).limitToFirst(1);
var results = $firebaseArray(query);
results.$loaded(
function(x) {
// let's get one
$scope.oneResult = x[0];
}, function(error) {
console.error("Error:", error);
});
};
答案 1 :(得分:0)
您可以使用包含所有键的对象来解决大型DB的问题,关于拾取随机密钥我觉得您的方式很好。
另一种方法我猜测是使用增量键,如@lombausch所说,然后你可以使用key()方法的组合来获得最后一个键,然后根据最小值,最大值获得随机值。
以下是保存增量/数字键的反模式: https://www.firebase.com/docs/web/guide/saving-data.html#section-push
key()方法参考: https://www.firebase.com/docs/web/api/firebase/key.html