mapreduce - MongoDB min/max aggregation -
मेरे पास इस सरलीकृत स्कीमा के साथ दस्तावेज़ हैं:
{positon: 10, value : 5, गिनती: 3} मैं क्या गणना करना चाहता हूं, उन दस्तावेजों को स्थिति द्वारा समूहबद्ध करना है और अधिकतम मान जहां गिनती 4 से अधिक है, लेकिन मान से न्यूनतम मान से कम है, जहां गिन 4 से कम है। मैंने किया है, लेकिन यह काम नहीं करता है:
{$ group: {_id: {स्थिति: "$ position",}, परिणाम: {$ अधिकतम: {$ cond: [$ $ : [{$ Gte: ["$ count", 4]}, {$ lt: ["$ मूल्य", {$ min: {$ cond: [{$ lt: ["$ count", 4]}, { मान: "$ value"}, 10]}}]}]}, {value: "$ value", nb: "$ count"}, 0]}}}} मुझे कहा गया है कि $ min एक अवैध ऑपरेटर है और मैं यह नहीं समझ सकता कि सही समुच्चय फ़ंक्शन कैसे लिखना है। क्या यह मैग्रेडोस चलाने के लिए बेहतर होगा? उदाहरण के लिए मेरे पास ये दस्तावेज़ हैं
{स्थिति: 10, मान: 1, गिनती 5} {स्थिति: 10, मूल्य: 3, गिनती 3} {स्थिति: 10, मान: 4, गिनती 5} {स्थिति: 10, मान: 7, गिनती 4} मुझे पुन: होना चाहिए
{स्थिति: 10, मान: 1, गिनती 4} क्योंकि यह अधिकतम 'मान' है जहां गिनती 4 से अधिक है, लेकिन यह भी क्योंकि 3 का मान है जिसमें केवल 3 की गणना होती है, इसलिए मान 4 वह नहीं है जो मैं देख रहा हूं।
जो गणित परीक्षा की समस्या की तरह पढ़ता है, जो आपको तर्क के साथ भ्रमित करने के लिए डिज़ाइन किया गया है। लेकिन उस अर्थ को पकड़ने के बाद आप निम्नलिखित चरणों के साथ एकत्रीकरण करते हैं:
db.positions.aggregate ([// अलग और कम से अधिक मूल्यों को अलग करें "{$ $"}: "{$ $"} से 4 से "स्थिति" {"$ group": {"_id": "$ position", "high": {"$ push": {"$ cond": [{"$ gt": ["$ count" "$ Value": "$ value", "count": "$ count"}, null]}}, "low": {"$ push": {"$ cond": [{$ "$ लेफ्टिनेंट ": [" $ count ", 4]}, {" value ":" $ value "," count ":" $ count "}, null]}}}}, //" low "counts array unwind { "$ Unwind": "$ low"}, // "$ group": {"$ group": "$ _id": "$ _id", "high": "$ first" कम गणनाओं से "$ अधिकतम" मान खोजें: "$ High"}, "कम": {"$ min": "$ low.value"}}}, // "उच्च" गणना वाले ऐरे को खोलें {"$ unwind": "$ high"}, // तुलना करें यह देखने के लिए कि यह {"$ परियोजना" से कम है: "उच्च": 1, "निचला": {"$ lt": ["$ high.value", "$ low" ]}}}, // सॉर्टिंग, $ अधिकतम कई मानों पर कार्य नहीं करेगा। दस्तावेज़ "{सॉर्ट करें": {"lower": -1, "high.value": -1}} चाहते हैं, // समूह, उच्चतम आदेश दस्तावेज़ प्राप्त करें जो शीर्ष {"$ group": {"_id": "$ _id", "value": {"$ first": "$ high.value"}, "गिनती" : {"$ First": "$ high.count"}}}]) इसलिए दस्तावेज़ों के सेट से:
{" position ": 10," value ": 1," count ": 5} {" स्थिति ": 10," मान ": 3," count ": 3} {" स्थिति ": 10 , "मान": 4, "गणना": 5} {"स्थिति": 10, "मूल्य": 7, "गिनती": 4} केवल पहले ही इस में वापस आ गया है मामले के रूप में यह मान "तीन की संख्या" दस्तावेज़ से कम है जहां यह स्वयं की गणना 4 से अधिक है।
{"_id": 10, "मान": 1, "गिनती": 5} मुझे यकीन है कि आप वास्तव में क्या मतलब है।
इसलिए आवेदन और वास्तव में केवल तभी लागू होता है जब किसी समूह श्रेणी के बाहर दस्तावेजों में असतत मूल्य। यदि आप दस्तावेज या वास्तव में पूरे दस्तावेज़ से एक से अधिक मान में रुचि रखते हैं, तो आप सॉर्टिंग और ग्रुपिंग सीमा पर प्रविष्टियां प्राप्त कर रहे हैं। और कुल मिलाकर बहुत कुछ है नक्शा की तुलना में अधिक तेज करें क्योंकि यह एक जावास्क्रिप्ट दुभाषिया के बिना देशी कोड का उपयोग करता है।
Comments
Post a Comment