Firebase从数据库中获取价值

时间:2017-12-22 14:49:29

标签: firebase firebase-realtime-database

问题是:当您只知道用户的用户名时,如何使用uid行?,例如,您只知道' senneken'你想知道' senneken'

的uid

额外信息:

我的用户数据库看起来像这样 enter image description here

我想向用户添加好友。我可以通过

检查用户是否存在
searchButton.addEventListener('click', function (event) {
    event.preventDefault();
    username = searchUsername.value;

    var ref = firebase.database().ref('users').orderByChild("username").equalTo(username).once("value", snapshot => {
        const userData = snapshot.val();
        if (userData) {
            console.log("Username " + username + " was found");
        } else {
            console.log("No user found");
        }

但现在我想在我的数据库中添加用户UID

我可以通过

添加好友用户名
addFriendButton.addEventListener('click', function (event) {
firebase.auth().onAuthStateChanged(function (user) {
    if (user) {
        var ref = firebase.database().ref("users").child(user.uid).child("friends").push({
            username: username
        })
    }
});
});

因为我使用推送总是在朋友下生成一个随机ID但是我想从我想要添加的用户那里获取UID并将其放在我的朋友之下(而不是随机的UID)

1 个答案:

答案 0 :(得分:0)

在这种情况下,朋友的集合看起来像:每个特定的UID可以在那里,也可以不在那里。它不能在那里不止一次,顺序似乎并不重要。解决方案是不使用推送ID,而是将其建模为 set ,如下所示:

friends
    uid1
        uid2: true
        uid3: true

这样您只需将用户设置为朋友:

firebase.database().ref("friends").child(user.uid).child(username).set(true)

您可能会注意到我也将朋友的集合转变为顶级集合。在其他关于用户的个人资料信息下嵌套有关朋友的信息是一种反模式,这使得难以保护数据,导致下载的数据超出了所需数量,而Firebase专家通常不建议这样做。