2016-12-30 5 views
7

状況は:あるノードから別のノードにchildNodeをコピーするにはどうすればよいですか?

私は他のノードに)それをchildNodeが、その後、(設定をダウンロードする必要があります。

問題がchildNodeがのスコア属性が100

と投稿は100以上のスコアを持っているとどのように私は新しいインデックスにそれらをコピーする場合、私は確認する必要がありますに達すると、私はこれだけをしたいです一度?


私が考えたもの:ポストがロードされると

、それのスコアを確認してください。それが> 100ならば、データベースにチェックインしてください。次に、ノードを新しい索引にプッシュします。


問題:

がどのように私はポストは複数の負荷にそれのスコアである> = 100がロードされるたびにアップロードされてからノードを防ぐでしょうか?私はそれが一度だけ起こる必要があります!


ソリューションコード:

if (funPost.score >= global.hotNumber && funPost.hot == false) { 
      var hotPostRef = firebase.database().ref("hot/section/"+key); 
      var hotPost = { 
       title: funPost.title, 
       image: funPost.image, 
       id: funPost.id, 
       key: funPost.key 
      } 
      hotPostRef.set(hotPost); 
      funPostRef.update({"hot": true}); 
     } 
    else if (funPost.score <= (global.hotNumber - 25) && funPost.hot == true) { 
     var hotPostRef = firebase.database().ref("hot/section/"+key); 
     hotPostRef.remove(); 
     funPostRef.update({"hot": false}); 
    } 

ソリューション:私はブールフラグを使用して終了。

+2

データを読み込んでいるときに '> = 100'インデックスを作成しているようです。これには理由がありますか?データの作成時に索引作成を検討しましたか?あなたができない理由はありますか?これは比較的単純です。 – cartant

+0

スコアを含むノードにオブザーバーを追加すると、更新時にアプリに通知されます。だからそれがあなたのアプリに通知するとき、それが100かどうかをチェックし、もしそうなら、ノードをダウンロードし、スコアを0にしてコピーを実行します。それがワンショット契約の場合、あなたはアプリにノード/ should_observeを含む設定ノードをチェックさせることができます:true、それが真である場合のみスコアノードを観察し、falseの場合はオブザーバを追加しないでください。しかし、ノード全体をダウンロードして書き直すのは残酷なようです。どうしてそんなことをするのか? – Jay

+0

@Jay res.render()を見ると、次のページの情報を表示するために投稿全体を渡しています。しかし、すべて正常です:私はブール値のフラグを使用して終了しました。今夜私のコードを投稿します。 – Coder1000

答えて

1

私はboolean型のフラグでそれをやってしまった:

if (funPost.score >= global.hotNumber && funPost.hot == false) { 
      var hotPostRef = firebase.database().ref("hot/section/"+key); 
      var hotPost = { 
       title: funPost.title, 
       image: funPost.image, 
       id: funPost.id, 
       key: funPost.key 
      } 
      hotPostRef.set(hotPost); 
      funPostRef.update({"hot": true}); 
     } 
    else if (funPost.score <= (global.hotNumber - 25) && funPost.hot == true) { 
     var hotPostRef = firebase.database().ref("hot/section/"+key); 
     hotPostRef.remove(); 
     funPostRef.update({"hot": false}); 
    } 
0

.once() insted of .on()を試してみてください。

ref.once('value') 
     .then(function(dataSnapshot) { 
     // handle read data. 
    }); 
+0

これは私がすでに考えていたものです。ただし、ページが読み込まれるたびに引き続きトリガーされます。 – Coder1000

+1

チェックアウトするコードを提供できますか? –

+0

サーバー側では、ページが読み込まれると、ポストのスコアも読み込まれます。スコアが100以上の場合は、投稿を新しい場所に設定します。通常、これは一度だけ行われることを確認するためにブール値のフラグを使用しますが、ここにどこに置くかはわかりません:/ – Coder1000

-1

https://gist.github.com/katowulf/6099042 はコピーまたは別のrefに参照を移動する方法です。

複数の負荷でスコアが> = 100であるため、投稿が が読み込まれるたびにノードがアップロードされるのを防ぐにはどうすればよいですか?私はそれを必要とします 一度だけ起こる!

1)新しい場所にパスキーが既に存在する場合、書き込みを失敗させるにはボルトルールを使用します。

2)スコアが上がる原因は何ですか?例えば調査完了、試験完了 これらのイベントは、必要なものを更新する一連のパイプラインを実行できるfirebaseキューに送信する必要があります。

関連する問題