从Firebase获取随机物品

时间:2017-07-17 13:28:15

标签: javascript firebase firebase-realtime-database

我搜索了它但所有的答案都很老了所以也许有更好的方法。 我试图从Firebase DB中获取一个随机项目,如下所示:

enter image description here

我想得到一个随机用户,就是所有人。

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

如果你知道有多少用户,你可以这样做:

$Servers = Import-Csv "C:\Users\username\Desktop\DNS.csv" | Select-Object -ExpandProperty Name
$secpass = ConvertTo-SecureString 'mypassword' -AsPlainText -Force
$myCred = New-Object System.Management.Automation.PSCredential("username", $secpass)

Invoke-Command -ComputerName $Servers -ScriptBlock {Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters} -Credential $myCred

但是,如果您不知道有多少孩子(或者将孩子列表存储在其他地方),那么在没有首先接收树中的所有孩子的情况下,没有直接的方法可以解决这个问题。有关详细信息,请参阅In Firebase, is there a way to get the number of children of a node without loading all the node data?

答案 1 :(得分:6)

我必须解决同样的问题,我在所有记录中添加了从0到1的随机数,最后按 startAt limitToFirst 过滤为1。

实施例: https://your-project-qwert.firebaseio.com/example.json?orderBy="随机"&安培; limitToFirst = 1&安培; startAt = 0.84

答案 2 :(得分:0)

首先,您已从firebase中检索所有用户ID。

然后声明一个存储其中所有用户标识的数组。下面显示了如何存储userId。

var arr = new Array();
// or var arr = [];
arr.push('user001');
arr.push('user002');

接下来,您必须从其中一个userId中随机选择。

var item = arr[Math.floor(Math.random()*arr.length)];
// item is randomly picked userId

我很抱歉,因为我没有完全告诉你实现的工作方式,因为我不使用javascript。

基本上这就是逻辑的工作原理。我希望它可以帮到你:D

答案 3 :(得分:0)

我一直在寻找相同的功能,现在我想可以使用新发布的 Cloud Firestore 来完成,但我正在寻找一个简单的解决方案。

顺便说一句。 limitToFirst + limitToLast 的整洁功能,至少不适用于javascript(web)。

我能想到的最好的(如果关键索引“时间随机”不够)是:

  

如果您只需要随机数据一次(我的情况,一副随机卡):

在该数字上添加Math.random()和orderByChild()值,删除键或使用最后使用的键作为参数的startAt()。

var ref = firebase.database().ref('companies/01/users').push();
ref.update({ ..., 'r': '0001' });

...

var ref = firebase.database().ref('companies/01/users')
ref.orderByChild('r').limitToLast(1).once('value').then(function(snapshot) {
  var totalIndex = Object.values(snapshot.val())[0].r;
});
var randomValue = Math.floor(Math.random() * totalIndex);
ref.orderByChild('r').equalTo(randomValue).once('value').then(function(snapshot) {
  var data = snapshot.val()
});
  

如果应该使用数据,则需要多次获取一个随机元素。

可以添加已知编号的索引

{{1}}