MongoDB एकत्रीकरण पाइपलाइन
आपकी समस्या के समाधान के लिए उपलब्ध है। आपको के साथ मेरी प्रोसेसिंग की एक सरणी से विवरण मिलता है $अनविंड
और फिर $group
का इस्तेमाल करके
कुल योग करने के लिए:
db.collection.aggregate([
// Unwind the array to de-normalize as documents
{ "$unwind": "$details" },
// Group on the key you want and provide other values
{ "$group": {
"_id": "$details.itemcode",
"itemname": { "$first": "$details.itemname" },
"totalprice": { "$sum": "$details.price" },
"totalqty": { "$sum": "$details.qty" }
}}
])
आदर्श रूप से आप एक $match
चाहते हैं
किसी भी अप्रासंगिक डेटा को पहले फ़िल्टर करने के लिए वहां चरण। यह मूल रूप से MongoDB क्वेरी है और सभी समान तर्कों और ऑपरेटरों को लेती है।
यहाँ अधिकांश वास्तव में सरल है। $unwind
एसक्यूएल में "जॉइन" की तरह है, सिवाय इसके कि एक एम्बेडेड संरचना में "जॉइन" पहले से ही बना हुआ है, इसलिए आप केवल "डी-नॉर्मलाइज़िंग" कर रहे हैं जैसे कि "एक से कई" टेबल रिश्तों के बीच में शामिल होगा, लेकिन बस के भीतर दस्तावेज़ ही। यह मूल रूप से "पैरेंट" दस्तावेज़ भागों को एक नए दस्तावेज़ के रूप में प्रत्येक सरणी सदस्य के लिए सरणी में "दोहराता है"।
फिर $group
एक कुंजी का काम करता है, जैसे "ग्रुप बाय" में, जहां "कुंजी" _id
है मूल्य। वहां सब कुछ "विशिष्ट" है और अन्य सभी मूल्य "समूह ऑपरेटरों" द्वारा एकत्रित किए जाते हैं।
यहीं पर $first
अंदर आओ। जैसा कि मैनुअल पेज पर वर्णित है, यह पहले "कुंजी" में उल्लिखित "ग्रुपिंग बाउंड्री" से "पहला" मान लेता है। आप ऐसा इसलिए चाहते हैं क्योंकि इस फ़ील्ड के सभी मान "संभावना" के समान होने की संभावना है, इसलिए यह केवल "पहला" मैच चुनने के लिए एक तार्किक विकल्प है।
अंत में है $sum
ग्रुपिंग ऑपरेटर जो वह करता है जिसकी अपेक्षा की जानी चाहिए। "कुंजी" के तहत सभी आपूर्ति किए गए मान कुल प्रदान करने के लिए एक साथ "जोड़ा" या "सारांश" हैं। SQL की तरह SUM()
।
यह भी ध्यान दें कि सभी $
उपसर्ग नाम वहाँ है कि कैसे एकत्रीकरण ढांचा संसाधित किए जा रहे वर्तमान दस्तावेज़ के भीतर "फ़ील्ड/प्रॉपर्टी" नामों के लिए चर के साथ व्यवहार करता है। "डॉट नोटेशन"
मूल संपत्ति के नाम में नेस्टेड "फ़ील्ड/प्रॉपर्टीज़" को संदर्भित करने के लिए उपयोग किया जाता है।
MongoDB में एकत्रीकरण सीखना उपयोगी है। यह सामान्य प्रश्नों के लिए है कि मूल "चयन" कथन से परे कुछ भी SQL के लिए है। न केवल "समूहीकरण" के लिए बल्कि अन्य हेरफेर के लिए भी।
सभी एकत्रीकरण ऑपरेटरों के दस्तावेज़ों को पढ़ें और एक एसक्यूएल टू एग्रीगेशन मैपिंग पर एक नज़र डालें। दस्तावेज़ीकरण में एक सामान्य मार्गदर्शिका के रूप में यदि आपके पास शुरू करने के लिए SQL के साथ कुछ परिचित हैं। यह अवधारणाओं को समझाने में मदद करता है और कुछ चीजें दिखाता है जिन्हें किया जा सकता है।