Firebase 从数据库中获取价值

Posted

技术标签:

【中文标题】Firebase 从数据库中获取价值【英文标题】:Firebase get value from database 【发布时间】:2017-12-22 14:49:28 【问题描述】:

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

额外信息:

我的用户数据库如下所示

我想向用户添加朋友。我可以通过这样做来检查用户是否存在

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】:

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

friends
    uid1
        uid2: true
        uid3: true

这样您就可以简单地将用户设置为好友:

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

您可能会注意到,我还把朋友的收藏变成了***收藏。将有关朋友的信息嵌套在有关用户的其他个人资料信息下是一种反模式,这使得保护数据变得困难,导致下载的数据超出所需,Firebase 专家通常不建议这样做。

【讨论】:

很好的解决方案。工作完美,确实不允许重复,并且可以使用此解决方案轻松修复。谢谢!

以上是关于Firebase 从数据库中获取价值的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 从数据库中获取价值

如何从 Firebase 数据库中的 autoID 获取价值 - Swift

无法从Firebase获取价值

如何从 Xamarin 中的 Firebase 获取价值?

如何从 Firebase android kotlin 获取所有具有特定价值的孩子?

Firebase 实时数据库使快照更有价值