2016-12-30 125 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並執行復制。如果這是一筆交易,您可以簡單地讓您的應用程序檢查包含node/should_observe:true的首選項節點,並且只在觀察分數節點(如果爲真),如果爲false,不添加觀察者。然而,下載整個節點並寫回它似乎是過度殺傷性的。你爲什麼這樣做? – Jay

+0

@Jay如果你看看我的res.render(),你會看到我正在傳遞整個帖子來顯示下一頁的信息。但一切都很好:我最終使用了一個布爾標誌。今晚將發佈我的代碼。 – Coder1000

回答

1

我結束了一個布爾標誌,這樣做:

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 .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隊列,可以運行一系列管道來更新您需要的任何內容。

相關問題