我需要下載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});
}
解決方法:最後我用一個布爾標誌。
當您讀取數據時,您似乎正在構建'> = 100'索引。是否有一個原因?您是否在編寫數據時考慮構建索引?你有沒有理由不能?這樣做是相對直接的。 – cartant
如果您將觀察者添加到包含樂譜的節點,它會在更新後通知您的應用。因此,當它通知您的應用程序時,檢查它是否爲100,如果是,請下載節點,將得分設爲0並執行復制。如果這是一筆交易,您可以簡單地讓您的應用程序檢查包含node/should_observe:true的首選項節點,並且只在觀察分數節點(如果爲真),如果爲false,不添加觀察者。然而,下載整個節點並寫回它似乎是過度殺傷性的。你爲什麼這樣做? – Jay
@Jay如果你看看我的res.render(),你會看到我正在傳遞整個帖子來顯示下一頁的信息。但一切都很好:我最終使用了一個布爾標誌。今晚將發佈我的代碼。 – Coder1000