2010-05-03 25 views
9

को कम से http://wiki.apache.org/couchdb/Introduction_to_CouchDB_viewsCouchDB का स्पष्टीकरण समारोह

CouchDB समारोह को कम के रूप में

function (key, values, rereduce) { 
    return sum(values); 
} 
  • कुंजी परिभाषित किया गया है एक सरणी जिसका तत्वों फार्म की सरणियों [महत्वपूर्ण हैं हो जाएगा की आवश्यकता है , आईडी]
  • मान के लिए उत्सर्जित मानों की एक सरणी होगी कुंजी में ective तत्वों
  • यानी कम करने ([[कुंजी 1, ID1], [कुंजी 2 आईडी 2], [key3, ID3]], [मान 1, मान 2, value3], झूठी)

मैं कर रहा हूँ समझने में परेशानी कब/क्यों कुंजी की सरणी में विभिन्न महत्वपूर्ण मान होंगे। यदि कुंजियों की सरणी में विभिन्न महत्वपूर्ण मान होते हैं, तो मैं इससे कैसे निपटूं?

उदाहरण के तौर पर, मान लें कि मेरे डेटाबेस में फॉर्म के खातों के बीच आंदोलन शामिल हैं।

{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"} 

मैं एक राय यह है कि एक खाते की शेष राशि देता है चाहता हूँ।

मेरे मानचित्र समारोह करता है:

emit(doc.CreditAccount, doc.amount) 
emit(doc.DebitAccount, -doc.amount) 

मेरे समारोह को कम करता है:

वापसी राशि (मान);

मुझे अपेक्षित परिणाम मिलते हैं, हालांकि मैं इस संभावना के साथ मेल नहीं कर सकता कि मेरा कम कार्य अलग-अलग महत्वपूर्ण मूल्य प्राप्त करता है।

क्या मेरा कम करने वाला फ़ंक्शन पहले प्रमुख मूल्यों को समूहित करना चाहता है? उस मामले में मैं किस प्रकार का परिणाम वापस करूँगा?

उत्तर

3

डिफ़ॉल्ट रूप से, फ़्यूटन आपके परिणामों को "समूह" करता है, जिसका अर्थ है कि आपको अपने मामले में प्रति कुंजी — प्रति नया ताजा कम मिलता है। समूह की सुविधा बिल्कुल इस स्थिति के लिए है।

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

+0

क्या आप इस मामले में कुंजी के समान मूल्य के साथ मुख्य पैरामीटर में सभी मान प्राप्त करने पर भरोसा कर सकते हैं? – Alan

+0

* * आपके HTTP क्वेरी के परिणामस्वरूप सभी मान प्राप्त करेंगे। दूसरे शब्दों में, आपकी शेष राशि सही होगी। हालांकि आप ** एक शॉट में अपने 'कम()' फ़ंक्शन को पास किए जाने वाले सभी मानों पर भरोसा नहीं कर सकते हैं। यह कॉच डीबी के प्रमुख व्यापार-बंदों में से एक है। – JasonSmith

+0

दूसरे शब्दों में, आपके द्वारा बताए गए फ़ंक्शन काम करेंगे क्योंकि ** समूह मानना ​​= सत्य ** यह हमेशा एक खाते के लिए जमा होगा। जब कोई अन्य खाता शुरू होता है, तो मान आपके लिए 0 पर रीसेट हो जाएगा। – JasonSmith