2017-11-14 5 views
1

検索フォームのボタンをクリックすると呼び出される関数があります。文字列を取得して文字のみであることを確認します。次に、選手名が既にデータベースに入っているかどうかを確認し、そうでない場合は追加します。彼がデータベースにいる場合は、ステートメントのelse部分に行きます。これはうまくいきますが、他の分野では、データベースにまったく同じ名前のプレーヤーが存在することがわかっている時点で、そのプレイヤーのデータベースの特性の1つを操作したい。具体的には、プレーヤーの投票数に1を加えます。スナップショットの後にFirebase要素を操作する

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: "テスト"、ランク:0、投票:0}

私はuserDataのプレーヤーでvotes ++を実行します。フィールドのデータを変更するために私のelseステートメントに何を追加するのか分かりません。

マイFirebaseがそうのようにレイアウトされています

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

答えて

2

は、あなたが希望のプレーヤーを指すようにキーを使用して、実際の結果を得るために、データをループする必要がある。この

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; 
     }); 
     }); 
    }) 
} 

をお試しくださいその値を設定します。お役に立てれば。

+0

これは私が必要なものです。ありがとうございます。しかし、私が検索機能を使って投票すると、データベースのユーザー情報がキーと投票数に変わり、名前(playerContent)とランクが消去されます。基本的に投票数だけの鍵の内容を上書きする – idlehand

+0

'playerContent:data.playerContent'も追加しました。名前を戻します。これが最善の方法かどうかはわかりませんが、現時点では問題ありません。 – idlehand

+1

'set'の代わりに' update'を使うことができます。 – Hareesh

関連する問題