इस लेख में, हम पता करेंगे कि MongoDB में बुनियादी क्वेरी संचालन कैसे करें। हम इंटरनेट के वैश्विक प्रसार के बाद अब एक अद्वितीय गति से डेटा का उत्पादन कर रहे हैं। चूंकि हमें किसी प्रकार का विश्लेषण करने के लिए डेटाबेस से आवश्यक डेटा एकत्र/अनुरोध करने की आवश्यकता होगी, इसलिए यह अत्यंत महत्वपूर्ण है कि हम डेटा को क्वेरी करने के लिए सही उपकरण चुनें।
यह वह जगह है जहाँ MongoDB विशेष रूप से आता है। MongoDB एक असंरचित डेटाबेस है, जो दस्तावेज़ों के रूप में डेटा संग्रहीत करता है। इसके अलावा, MongoDB भारी मात्रा में डेटा को संभालने में बहुत प्रभावी है और यह सबसे अधिक इस्तेमाल किया जाने वाला NoSQL डेटाबेस है क्योंकि यह समृद्ध क्वेरी भाषा और बहुमुखी और आसान डेटा एक्सेस प्रदान करता है।
नमूना डेटाबेस बनाएं
शुरुआत से पहले, हम सभी ऑपरेशन करने के लिए कुछ नमूना डेटा के साथ एक नमूना डीबी बनाएंगे।
हम myDB . नाम से एक डेटाबेस तैयार करेंगे और आदेश . नाम से एक संग्रह तैयार करेगा . इसके लिए कथन इस प्रकार होगा।
> use myDB
> db.createCollection("orders")
>
MongoDB पंक्तियों और स्तंभों का उपयोग नहीं करता है। यह डेटा को एक दस्तावेज़ प्रारूप में संग्रहीत करता है। संग्रह दस्तावेज़ों का एक समूह है।
आप निम्न कथन का उपयोग करके डेटाबेस में सभी संग्रहों की जांच कर सकते हैं।
> use myDB
>show collections
orders
system.indexes
>
आइए निम्नलिखित कथन का उपयोग करके कुछ दस्तावेज़ सम्मिलित करें।
> db.orders.insert([
{
Customer: "abc",
Address:{"City":"Jaipur","Country":"India"},
PaymentMode":"Card",
Email:"[email protected]",
OrderTotal: 1000.00,
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":10},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"journal","Price":"200.00","Qty":2},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
},
{
Customer: "xyz",
Address:{"City":"Delhi","Country":"India"},
PaymentMode":"Cash",
OrderTotal: 800.00,
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":5},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
},
{
Customer: "ron",
Address:{"City":"New York","Country":"USA"},
PaymentMode":"Card",
Email:"[email protected]",
OrderTotal: 800.00,
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":5},
{"ItemName":"postcard","Price":"10.00","Qty":00}
]
}
])
दस्तावेज़ RDBMS पंक्ति के बराबर है। यह आवश्यक नहीं है कि प्रत्येक दस्तावेज़ में समान स्कीमा हो। इसका मतलब है कि दस्तावेज़ में कोई भी फ़ील्ड नहीं हो सकती है जिसका कोई मूल्य नहीं है।
क्वेरी दस्तावेज़
ढूंढें() विधि
आपको MongoDB संग्रह से दस्तावेज़ों को क्वेरी करने के लिए खोज () विधि का उपयोग करने की आवश्यकता है। निम्नलिखित कथन संग्रह से सभी दस्तावेजों को पुनः प्राप्त करेगा।
> db.orders.find()
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
Address:{"City":"Jaipur","Country":"India"},
PaymentMode":"Card",
Email:"[email protected]",
OrderTotal: 1000.00,
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":10},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"journal","Price":"200.00","Qty":2},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz",
Address:{"City":"Delhi","Country":"India"},
PaymentMode":"Cash",
OrderTotal: 800.00,
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":5},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
Customer: "ron",
Address:{"City":"New York","Country":"USA"},
PaymentMode":"Card",
Email:"[email protected]",
OrderTotal: 600.00,
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":5},
{"ItemName":"postcard","Price":"10.00","Qty":00}
]
}
>
प्रक्षेपण
यदि आप केवल चयनित फ़ील्ड लाना चाहते हैं तो आप प्रोजेक्शन का उपयोग कर सकते हैं। निम्नलिखित कथन केवल ग्राहक प्राप्त करेगा और ईमेल फ़ील्ड.
> db.orders.find( { }, { Customer: 1, Email: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
Email:"[email protected]"
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz"
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
Customer: "ron",
Email:"[email protected]"
}
>
एक शर्त निर्दिष्ट करके दस्तावेज़ों को फ़िल्टर करें
अब हम सीखेंगे कि हम एक निर्दिष्ट शर्त से मेल खाने वाले दस्तावेज़ कैसे प्राप्त कर सकते हैं। MongoDB इसके लिए कई तुलना ऑपरेटर प्रदान करता है।
1. $eq ऑपरेटर
$eq ऑपरेटर निर्दिष्ट मान के साथ फ़ील्ड मान की समानता की जाँच करता है। ऑर्डर लाने के लिए जहां PaymentMode 'कार्ड' है, आप निम्नलिखित कथन का उपयोग कर सकते हैं
>db.orders.find( { PaymentMode: { $eq: "Card" } } )
यह प्रश्न नीचे की तरह भी लिखा जा सकता है
>db.orders.find( { PaymentMode: "Card" } )
एक समान SQL कथन इस प्रकार होगा
SELECT * FROM orders WHERE PaymentMode="Card"
उदाहरण
>db.orders.find( { PaymentMode: "Card" }, { Customer: 1, PaymentMode: 1 } )
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
PaymentMode":"Card"
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
Customer: "ron",
PaymentMode":"Card"
}
>
$eq ऑपरेटर एम्बेडेड दस्तावेज़ के साथ
आपने देखा होगा कि हमने एक एम्बेडेड दस्तावेज़ पता डाला है आदेश . में संग्रह। अगर आप उस ऑर्डर को लाना चाहते हैं जहां देश क्या 'भारत' है, आप निम्न कथन की तरह डॉट नोटेशन का उपयोग कर सकते हैं।
>db.Orders.find( { "Address.Country": { $eq: "India" } } )
यह प्रश्न नीचे की तरह भी लिखा जा सकता है
>db.Orders.find( { "Address.Country":"India" } )
उदाहरण
>db.Orders.find( { "Address.Country": { $eq: "India" } } , { Customer: 1, Address: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
Address:{"City":"Jaipur","Country":"India"}
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz",
Address:{"City":"Delhi","Country":"India"}
}
>
सरणी के साथ $eq ऑपरेटर
यदि किसी सरणी में किसी आइटम के लिए निर्दिष्ट शर्त सही है, तो $eq ऑपरेटर सभी दस्तावेज़ों को पुनः प्राप्त करेगा। हमारे पास एक ऑर्डर आइटम है दस्तावेज़ में सरणी। यदि आप उन दस्तावेज़ों को फ़िल्टर करना चाहते हैं जहाँ 'कागज' का भी आदेश दिया गया था तो विवरण इस प्रकार होगा।
>db.Orders.find( { "OrderItems.ItemName": { $eq: "paper" } } )
यह प्रश्न नीचे की तरह भी लिखा जा सकता है
>db.Orders.find( { "OrderItems.ItemName": "paper" } )
उदाहरण
>db.Orders.find( { "OrderItems.ItemName": { $eq: "paper" } } , { Customer: 1, OrderItems: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":10},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"journal","Price":"200.00","Qty":2},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz",
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":5},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
}
>
2. $gt ऑपरेटर
आप $gt ऑपरेटर का उपयोग उन दस्तावेज़ों को पुनः प्राप्त करने के लिए कर सकते हैं जहाँ फ़ील्ड का मान निर्दिष्ट मान से अधिक है। निम्न कथन उन दस्तावेज़ों को प्राप्त करेगा जहाँ OrderTotal 800 से अधिक है।
>db.orders.find( { OrderTotal: { $gt: 800.00 } } )
एक समान SQL कथन इस प्रकार होगा
SELECT * FROM orders WHERE OrderTotal>800.00
उदाहरण
>db.Orders.find( { "OrderTotal": { $gt: 800.00 } } , { Customer: 1, OrderTotal: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
OrderTotal: 1000.00
}
>
3. $gte ऑपरेटर
आप $gte ऑपरेटर का उपयोग उन दस्तावेज़ों को पुनः प्राप्त करने के लिए कर सकते हैं जहाँ फ़ील्ड का मान निर्दिष्ट मान से अधिक या उसके बराबर है। निम्न कथन उन दस्तावेज़ों को प्राप्त करेगा जहाँ OrderTotal 800 से अधिक या उसके बराबर है।
>db.orders.find( { OrderTotal: { $gte: 800.00 } } )
एक समान SQL कथन इस प्रकार होगा
SELECT * FROM orders WHERE OrderTotal>=800.00
उदाहरण
>db.Orders.find( { "OrderTotal": { $gte: 800.00 } } , { Customer: 1, OrderTotal: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
OrderTotal: 1000.00
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz",
OrderTotal: 800.00
}
>
4. $lt ऑपरेटर
आप $lt ऑपरेटर का उपयोग उन दस्तावेज़ों को पुनः प्राप्त करने के लिए कर सकते हैं जहाँ फ़ील्ड का मान निर्दिष्ट मान से कम है। निम्न कथन उन दस्तावेज़ों को प्राप्त करेगा जहाँ OrderTotal 800 से कम है।
>db.orders.find( { OrderTotal: { $lt: 800.00 } } )
एक समान SQL कथन इस प्रकार होगा
SELECT * FROM orders WHERE OrderTotal<800.00
उदाहरण
>db.Orders.find( { "OrderTotal": { $lt: 800.00 } } , { Customer: 1, OrderTotal: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
Customer: "ron",
OrderTotal: 600.00
}
>
4. $lte ऑपरेटर
आप $lte ऑपरेटर का उपयोग उन दस्तावेज़ों को पुनः प्राप्त करने के लिए कर सकते हैं जहाँ फ़ील्ड का मान निर्दिष्ट मान से कम या उसके बराबर है। निम्नलिखित कथन उन दस्तावेज़ों को प्राप्त करेगा जहाँ OrderTotal 800 से कम या उसके बराबर है।
>db.orders.find( { OrderTotal: { $lte: 800.00 } } )
एक समान SQL कथन इस प्रकार होगा
SELECT * FROM orders WHERE OrderTotal<=800.00
उदाहरण
>db.Orders.find( { "OrderTotal": { $lte: 800.00 } } , { Customer: 1, OrderTotal: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz",
OrderTotal: 800.00
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
Customer: "ron",
OrderTotal: 600.00
}
>
5. $ne ऑपरेटर
आप $ne ऑपरेटर का उपयोग उन दस्तावेज़ों को पुनः प्राप्त करने के लिए कर सकते हैं जहाँ फ़ील्ड का मान निर्दिष्ट मान के बराबर नहीं है।
>db.orders.find( { PaymentMode: { $ne: "Card" } } )
एक समान SQL कथन इस प्रकार होगा
SELECT * FROM orders WHERE PaymentMode != "Card"
उदाहरण
>db.Orders.find( { "PaymentMode": { $ne: "Card" } } , { Customer: 1, PaymentMode: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz",
PaymentMode":"Cash"
}
>
6. $इन ऑपरेटर
आप $in ऑपरेटर का उपयोग उन दस्तावेज़ों को पुनः प्राप्त करने के लिए कर सकते हैं जहाँ फ़ील्ड का मान निर्दिष्ट सरणी में किसी भी मान के बराबर है।
>db.orders.find( { OrderItems.ItemName: { $in: ["journal","paper"] } } )
उदाहरण
>db.Orders.find( { OrderItems.ItemName: { $in: ["journal","paper"] } } , { Customer: 1, OrderItems: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607534c")
Customer: "abc",
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":10},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"journal","Price":"200.00","Qty":2},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
},
{
"_id" : ObjectId("5dd4e2cc0821d3b44607544c"),
Customer: "xyz",
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":5},
{"ItemName":"paper","Price":"10.00","Qty":5},
{"ItemName":"postcard","Price":"10.00","Qty":500}
]
}
>
7. $nin ऑपरेटर
आप $nin ऑपरेटर का उपयोग उन दस्तावेज़ों को पुनः प्राप्त करने के लिए कर सकते हैं जहाँ फ़ील्ड का मान निर्दिष्ट सरणी में किसी भी मान के बराबर नहीं है। यह उन दस्तावेज़ों का भी चयन करेगा जहाँ फ़ील्ड मौजूद नहीं है।
>db.orders.find( { OrderItems.ItemName: { $nin: ["journal","paper"] } } )
उदाहरण
>db.Orders.find( { OrderItems.ItemName: { $nin: ["journal","paper"] } } , { Customer: 1, OrderItems: 1 })
{
"_id" : ObjectId("5dd4e2cc0821d3b44607644c"),
Customer: "ron",
OrderItems:[
{"ItemName":"notebook","Price":"150.00","Qty":5},
{"ItemName":"postcard","Price":"10.00","Qty":00}
]
}
>
अनुक्रमण
हम जानते हैं कि यदि हम किसी बड़े डेटाबेस पर प्रश्नों को निष्पादित कर रहे हैं तो अनुक्रमण बहुत महत्वपूर्ण है। अनुक्रमण के बिना किसी क्वेरी का निष्पादन महंगा हो सकता है। हम निम्नलिखित कथन का उपयोग करके एक ही फ़ील्ड पर एक साधारण आरोही अनुक्रमणिका जोड़ सकते हैं।
>db.Orders.createIndex({"Customer":1})
MongoDB डिफ़ॉल्ट रूप से '_id' फ़ील्ड पर एक अद्वितीय अनुक्रमणिका बनाता है। एक अद्वितीय अनुक्रमणिका उस फ़ील्ड के लिए समान मान वाले दो दस्तावेज़ों को सम्मिलित करने से रोकेगी। यदि आप एक अद्वितीय अनुक्रमणिका बनाना चाहते हैं तो कथन इस प्रकार होगा।
db.Orders.createIndex( { "OrderId": 1 }, { unique: true } )
निष्कर्ष
मुझे आशा है कि आपने आज कुछ नया सीखा है, यदि आप मोंगोडीबी पर कुछ और चीजें सीखना चाहते हैं, तो यहां स्व-होस्टेड मोंगोडीबी पर एक दिलचस्प लेख है, मैं आपको अपने दम पर सामान आज़माने और टिप्पणी अनुभाग में अपना अनुभव साझा करने के लिए भी आमंत्रित करता हूं। इसके अलावा, यदि आपको उपरोक्त किसी भी परिभाषा में कोई समस्या आती है, तो कृपया नीचे टिप्पणी में मुझसे बेझिझक पूछें।