2012-02-18 21 views
5

मैं जो इस तरह दिखेगा दस्तावेजों की एक संख्या है:CouchDB मानचित्र/एक सरणी के लिए कम

{userId: 123, msg:{ timestamp:123456, event:"actionA"} }

{userId: 123, msg:{ timestamp:123466, event:"actionB"} }

etc...

मानचित्र fn:

emit(doc.userId, [doc.msg])

fn कम करें:

return [].concat.apply([], vs)

इन कार्यों मैं क्या उम्मीद करने के लिए लग रहे हैं, इसलिए मैंने सोचा था मैं की तरह उत्पादन देखना चाहते हैं:

Key: 123, Value: [{timestamp:123456, event:"actionA"}, {timestamp:123466, event:"actionB"}, ...etc...]

लेकिन, मैं एक हो रही है अतिप्रवाह त्रुटि को कम करें, "आउटपुट कम करें और तेजी से घटना चाहिए"। दरअसल, couchdb docs कहता है कि "अंगूठे के नियम के रूप में, कम करने के कार्य को एकल स्केलर मान में कम करना चाहिए।" ... "यदि आप" गलत तरीके "को कम करने का प्रयास करने की कोशिश करते हैं तो" कॉच डीबी आपको चेतावनी देगा "।

तो, मुझे लगता है मैं काउच एमआर उपयोग कर रहा हूँ "गलत तरीके से" लगता है। इस तरह की गणना करने के लिए "सही तरीका" क्या होगा?

उत्तर

4

मैं इस पर पहुंच जाते हैं बहुत से पहले। कॉच डीबी को लंबी सूची पसंद है, न कि वसा सूचियां। दूसरे शब्दों में, आप शायद कुंजी दृश्य में जो चाहते हैं उसे प्राप्त कर सकते हैं, और उन्हें एक ही चीज़ में कम नहीं कर सकते हैं।

आप एक userId से सभी संदेशों को देखना चाहते हैं, तो आप एक समारोह को कम जरूरत नहीं है। बस ?key=123 के साथ अपने विचार से पूछें। आप उस उपयोगकर्ता के लिए सभी संदेश देखेंगे और आकार के लिए कोई सीमा नहीं है।

यदि आप प्रारूप से नाखुश हैं (यदि आप बस सोफे भेजते हैं जो JSON बदलते हैं), तो साइमन की सूची फ़ंक्शन लिंक सही है।

2

मुझे लगता है कि सही तरीके से एक list function उपयोग करने के लिए है। यदि आप यही चाहते हैं तो आप अपनी सूची फ़ंक्शन आउटपुट JSON प्राप्त कर सकते हैं।