Javascript 如何在Firebase上随机获取相同的数据?

Javascript 如何在Firebase上随机获取相同的数据?,javascript,firebase,react-native,firebase-realtime-database,Javascript,Firebase,React Native,Firebase Realtime Database,我有用户表和这个代码 getOnline代码和已连接按钮 var onlineStatus = firebase.database().ref("users/" + firebase.auth().currentUser.uid + "/online"); onlineStatus.set(1); 及 我已经可以看到online=1个用户,但我想随机获得一个拥有online=1的用户 我该怎么做 更新 我想建立随机聊天。人们将根据标准进行匹配。比如Tinder应用程序。想想看,这里有一个页

我有用户表和这个代码

getOnline代码和已连接按钮

var onlineStatus = firebase.database().ref("users/" + firebase.auth().currentUser.uid + "/online");
onlineStatus.set(1);  

我已经可以看到online=1个用户,但我想随机获得一个拥有online=1的用户

我该怎么做

更新

我想建立随机聊天。人们将根据标准进行匹配。比如Tinder应用程序。想想看,这里有一个页面和按钮。当用户按下按钮时,它将匹配任何在线用户。还有聊天

firebase用户

users
     VIkvYAtLHxNqAwd722oKenriM7PJz2
        email: "mail@hotmail.com"
        online: 1 
        profile_picture:"https://scontent.xx.fbcdn.net" 
        username: "John Snow"

     DIkvYAtLHxNqAwd722oKenriM7PJz2
        email: "mail2@hotmail.com"
        online: 1 
        profile_picture:"https://scontent.xx.fbcdn.net" 
        username: "Jane Snow"
您可以使用该函数获取一个随机数(我们称之为n),然后在线获取n第个用户:

refUser.orderByChild("online").equalTo(1).on("value", function(Data){
    console.log(Data.val(), Data.key);
    var totalOnline = Data.numChildren(); //get number of online users
    var randomNr = Math.random() * totalOnline;
    var userIndex = parseInt(randomNr, 10); //parse the random number from double to integer
    var currentIndex = 0;
    Data.forEach(function(snap){
        if(currentIndex==userIndex){
            var randomUser = snap.val();
            //Do something with your random user
            break;
        }
        currentIndex++;
    });
});
另外请注意,如果您有一个拥有数千用户的大型应用程序,您可能希望将查询限制为50个用户,以提高应用程序的性能:

refUser.orderByChild("online").equalTo(1).limitToFirst(50)
更新:要排除您自己的用户,您可以检查随机用户是否是您。如果是,请转到下一个:

        if(currentIndex>=userIndex && snap.key != firebase.auth().currentUser.uid){
            var randomUser = snap.val();
            //Do something with your random user
            break;
        }
更新2:我发现您不能在
forEach
循环中使用
break
。因此,您可以使用提供的解决方案解决该问题(使用BreakException):


我是最新的,我正在尝试与天才聊天室进行随机配对聊天看看我的最新答案谢谢你的帮助!!!:)我不理解limitToFirst,因为我会匹配所有用户的年龄、位置和性别。例如:我有一个1k用户在同一个位置。此代码都检查1k用户并使用limitToFirst(50)?此代码有效,但我匹配了自己的用户。如何排除自己的用户?因为currentUser online=1:/谢谢。我的坏@Cœur。索引已更改,因为我使用了编辑器上的超链接按钮。下次我将手动编辑它。Thanks@Ros哦,有趣的是,我没有意识到使用编辑器的副作用ks的提示。@RosárioPereiraFernandes感谢更新但中断;显示错误,因此无法正常工作。代码正常工作,但所有联机用户都得到:S
        if(currentIndex>=userIndex && snap.key != firebase.auth().currentUser.uid){
            var randomUser = snap.val();
            //Do something with your random user
            break;
        }
refUser.orderByChild("online").equalTo(1).on("value", function(Data){
    console.log(Data.val(), Data.key);
    var totalOnline = Data.numChildren(); //get number of online users
    var randomNr = Math.random() * totalOnline;
    var userIndex = parseInt(randomNr, 10); //parse the random number from double to integer
    var currentIndex = 0;
    var BreakException = {};
    try
    {
        Data.forEach(function(snap){
            if(currentIndex==userIndex){
                var randomUser = snap.val();
                //Do something with your random user
                throw BreakException;
            }
            currentIndex++;
        });
    }
    catch(e){
        if(e!== BreakException) throw e;
    }
});