2016-12-30 11 views
7

स्थिति:एक नोड से दूसरे नोड में एक बच्चे नोड की प्रतिलिपि कैसे करें?

मैं दूसरे नोड में) 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 पर स्कोर करें और प्रतिलिपि करें।यदि यह एक शॉट डील है तो आप बस अपने ऐप को वरीयता नोड की जांच कर सकते हैं जिसमें नोड/चाहिए_ब्सर्व शामिल है: सत्य और केवल सही नोड्स का निरीक्षण करें यदि यह सत्य है, तो गलत है, तो पर्यवेक्षक को न जोड़ें। हालांकि, पूरे नोड को डाउनलोड करना और इसे वापस लिखना ओवरकिल जैसा लगता है। तुम वो क्यों कर रहे हो? – 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() इंस्टेंट का उपयोग करने का प्रयास करें।

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

यही वही है जो मैंने पहले ही सोचा था। लेकिन पेज लोड होने पर भी यह ट्रिगर हो जाएगा। – Coder1000

+1

क्या आप इसे देखने के लिए कोड का एक टुकड़ा प्रदान कर सकते हैं? –

+0

सर्वर-साइड पर, जब पृष्ठ लोड होता है, तो पोस्ट का स्कोर भी होता है। यदि स्कोर> = 100 है, तो पोस्ट को नए स्थान पर सेट करें। आम तौर पर मैं यह सुनिश्चित करने के लिए एक बुलियन ध्वज का उपयोग करता हूं कि यह केवल एक बार होता है, लेकिन मुझे नहीं लगता कि मैं इसे कहां रखूंगा:/ – Coder1000

-1

https://gist.github.com/katowulf/6099042 है आप कैसे कॉपी या किसी अन्य रेफरी के लिए रेफरी चलते हैं।

प्रत्येक बार पोस्ट लोड होने के बाद से नोड को अपलोड होने से कैसे रोक दिया जाएगा क्योंकि यह स्कोर है = = 100 एकाधिक भारों पर? मुझे इसकी आवश्यकता है केवल एक बार होता है!

1) नए स्थान पर पथ कुंजी पहले से मौजूद है() लिखने में विफल होने के लिए बोल्ट नियमों का उपयोग करें।

2) स्कोर का क्या कारण बनता है? जैसे सर्वेक्षण पूरा हुआ, परीक्षा पूरा हो गई है इन घटनाओं को फायरबेस कतार में भेजा जाना चाहिए जो आपको जो कुछ भी चाहिए उसे अपडेट करने के लिए पाइपलाइनों की एक श्रृंखला चला सकता है।

संबंधित मुद्दे