2010-05-12 15 views
20

मुझे मोंगोडीबी दस्तावेज़ों में उदाहरणों की तुलना में थोड़ा अधिक जटिल चाहिए और मैं इसके चारों ओर अपने सिर को लपेटने में सक्षम नहीं लग रहा हूं।मोंगोडीबी के मानचित्र का उपयोग/दो क्षेत्रों में "समूह द्वारा"

मैं प्रपत्र {date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}

अब मैं क्वेरी द्वारा किसी SQL ग्रुप को कुछ इसी तरह प्राप्त करना चाहते हैं की वस्तुओं का संग्रह है, दोनों की तारीख और प्रकार से अधिक समूहीकरण कहो। यही है, मैं हर दिन प्रत्येक प्रकार की घटनाओं की संख्या चाहता हूं। इसके अलावा, मैं इसे user_id द्वारा अद्वितीय बनाना चाहता हूं, यानी। यदि किसी उपयोगकर्ता के पास उसी दिन अधिक घटनाएं होती हैं, तो इसे केवल एक बार गिनें।

मैं इसे मानचित्र/कम करने के साथ करने की कोशिश कर रहा हूं।

मुझे क्या करना

db.logs.mapReduce( 
    function() { 
     emit(this.type, 1); 
    }, 
    function(k, vals) { 
     var total = 0; 
     for (var i = 0; i < vals.length; i++) 
      total += vals[i]; 
     return total; 
    } 
) 

जो अच्छी तरह से, प्रकार के आधार पर समूहों लेकिन अब, कैसे कर सकते हैं मैं एक ही समय में दिनांक के आधार पर समूह? एमिट में कुंजी लगता है() एक सरणी नहीं हो सकती है (मैंने emit([this.date, this.type], 1) करने के बारे में सोचा था)। साथ ही, मैं प्रति उपयोगकर्ता विशिष्टता कैसे सुनिश्चित कर सकता हूं?

मैं अभी मोंगोडीबी से शुरू कर रहा हूं और मुझे अभी भी बुनियादी अवधारणाओं को समझने में परेशानी हो रही है। इसके अलावा, वहाँ बहुत अधिक दस्तावेज उपलब्ध नहीं है। अधिक अनुभवी उपयोगकर्ताओं से किसी भी मदद की सराहना की जाती है। धन्यवाद!

+0

couchdb सरणी के रूप में सरणी कर सकता है, बस कहें ' – dominic

उत्तर

19

मोंगोडीबी कुकबुक में एक बहुत अच्छा समाधान मिला (पहले इस संसाधन के बारे में नहीं पता था)।

http://cookbook.mongodb.org/patterns/unique_items_map_reduce/

मूल रूप से, एकाधिक कुंजियों से समूह के लिए, आप एक dict, नहीं एक सूची है (जैसा कि मैंने कोशिश की) का उपयोग करें। इसके अलावा, अद्वितीय परिणाम प्राप्त करने के लिए, आपको दो मानचित्र/पास को कम करने की आवश्यकता है।

+3

लिंक काम नहीं करता है। कोई भी जो कुछ क्षेत्रों में समूह/उत्सर्जित करने में रूचि रखता है, निम्नलिखित संरचना का उपयोग कर सकता है: उत्सर्जित करें ({date: this.date, टाइप: this.type}, 1) –

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