2012-09-09 18 views
5

त्वरित प्रश्न के साथ सरल मतदान प्रणाली में मेरे पास मोंगोडब में कलाकृतियों की एक सूची है और मैं चाहता हूं कि उपयोगकर्ता कलात्मक को वोट देने या नीचे करने में सक्षम हों।मोंगोडीबी

मेरा पहला रास्ता लेख संग्रह में होगा दो पंक्तियों वोट दें कहा जाता है और downvote वे वोट दें जैसे संख्या के लिए होता है करने के लिए: 360 downvote: 102;

तो मुझे अपवोट-डाउनवोट करके इसे ऑर्डर करने की आवश्यकता होगी, यह कलात्मक की कुल पसंद दिखाएगा।

मेरा प्रश्न mongoDB में है यह करने का यह सबसे अच्छा तरीका है या मैं एक "वोट" से बेहतर हूं और फिर इसे उस वोट द्वारा ऑर्डर करें।

आप

उत्तर

7

धन्यवाद जब आप इसे इस तरह से करना होगा, आप ट्रैक नहीं होगा जो उपयोगकर्ता पहले से ही मतदान किया है, इसलिए उन पर कई बार मतदान कर सकते हैं। यह निश्चित रूप से आपकी रुचि में नहीं है।

यही कारण है कि मैं एक सरणी "वोट" प्रत्येक लेख जो प्रत्येक वोट के लिए एक वस्तु जो विशिष्ट रूप से उपयोगकर्ता के लिए जो कर दिया की पहचान करता है शामिल करने के लिए जोड़ना होगा के लिए यह:

votes: [ 
     { voter:"name or ID or IP address or some other unique identifier for the person who voted", 
      vote:-1 }, 
     { voter:"someone else", 
      vote:1 }, 
     { voter:"and someone entirely different", 
      vote:-1 } 
    ] 

आप लेख पर एक अद्वितीय सूचकांक बनाते हैं आईडी और वोट.वॉटर, आपने पहले ही यह सुनिश्चित कर लिया है कि कोई भी लेख के लिए दो बार वोट नहीं दे सकता है।

जब आप डाउनवोट के लिए "-1" के मान का उपयोग करते हैं और अपवोट के लिए "1" का उपयोग करते हैं तो आप $ योग समेकित फ़ंक्शन का उपयोग करके किसी लेख के कुल स्कोर की गणना कर सकते हैं (यह आपको बाद में भारित वोटों को आसानी से पेश करने की अनुमति भी देगा , जब आप इसे महसूस करते हैं)।

+0

धन्यवाद। अब मुझे बस काम करना है कि मैं उस सरणी में वोट कैसे गिनता हूं, मैं इसे वोट देता हूं। vote.count(); – RussellHarrower

+1

@Russell आप अभी भी ऊपर हो सकते हैं: 60 और नीचे: 32 फ़ील्ड मुख्य आलेख ऑब्जेक्ट पर वोट गिनने के त्वरित पहुंच के रूप में। – halil