【问题标题】:Manipulating a Firebase element after Snapshot在快照后操作 Firebase 元素
【发布时间】:2018-04-27 02:43:18
【问题描述】:

我有一个在单击搜索表单上的按钮时被调用的函数。我们得到字符串并检查它以确保它只是字母。然后我们检查玩家姓名是否已经在数据库中,如果不是,我们添加他。如果他在数据库中,我们转到语句的 else 部分。这工作正常 - 但在我的其他区域中,当我们确定数据库中有一个具有完全相同名称的玩家时,我想为该玩家操作数据库中的一个特征.具体来说,将玩家投票数加 1。

writePlayer(newPlayerContent){
if (/^[a-zA-Z\s]*$/.test(this.state.newPlayerContent)) {
    this.checkIfUserExists(this.state.newPlayerContent);

    if(this.state.duplicate !== true){
    this.props.addPlayer(this.state.newPlayerContent);
    this.setState({
        newPlayerContent: '',
        })
    }
    else{
        var playersRef = firebase.database().ref();
        playersRef.child('players').orderByChild("playerContent").equalTo(this.state.newPlayerContent).once("value",snapshot => {
        const userData = snapshot.val();
        console.log(userData)
        })
    }
}
else {
    console.log("Non-letter character found in: " + this.state.newPlayerContent)
    }

}

当我这样做时 console.log(userData) 我正在获取我想要操作的特定播放器的相关信息 - 例如

-KytHrvt8R1DkY0E4Fho: {playerContent: "Test", rank: 0, votes: 0}

我想在 userData 中对播放器进行投票++。我只是不知道要在 else 语句中添加什么来更改该字段数据。

我的 Firebase 布局如下:

players
    playerContent: "Test"
    rank: 0
    votes: 0

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    试试这个

    else{
        var playersRef = firebase.database().ref();
        playersRef.child('players').orderByChild("playerContent").equalTo(this.state.newPlayerContent).once("value",snapshot => {
        snapshot.forEach(child => {
            const data = child.val();       
            const key = child.key
            //set the  vote count
            playersRef.child('players/'+key).update({
                votes: data.votes + 1;
             });
          });
        })
    }
    

    您需要遍历数据以获得实际结果,然后使用键指向所需的播放器并设置其值。希望这会有所帮助。

    【讨论】:

    • 这是我需要的,谢谢。但是,当我通过搜索功能投票时,它会将数据库中的用户信息更改为仅一个键和一个投票计数,从而删除他们的姓名(playerContent)和排名。基本上只用投票计数覆盖密钥的内容
    • 我也添加了playerContent: data.playerContent,它会将名称重新输入。不确定这是否是最好的方法,但目前运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多