कभी-कभी जब आप MongoDB में किसी संग्रह को क्वेरी करते हैं, तो हो सकता है कि आप फ़ील्ड नामों से खुश न हों। डिफ़ॉल्ट रूप से, फ़ील्ड नाम केवल वास्तविक दस्तावेज़ों में फ़ील्ड नामों का प्रतिबिंब होते हैं।
शायद फ़ील्ड नाम असंगत हैं, या कोई त्रुटि है। कारण जो भी हो, आप $project
. का उपयोग कर सकते हैं आपके क्वेरी परिणामों में किसी फ़ील्ड का नाम बदलने के लिए एकत्रीकरण पाइपलाइन चरण।
कुछ मायनों में, यह SQL में एक उपनाम का उपयोग करने के लिए तुलनीय है, क्योंकि यह अंतर्निहित फ़ील्ड का नाम नहीं बदलता है, यह केवल क्वेरी परिणामों में उनका नाम बदल देता है।
उदाहरण
मान लीजिए कि हम किसी संग्रह की सामग्री को इस तरह लौटाते हैं:
db.employees.find()
परिणाम:
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Chris", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
यहां, हम find()
. का उपयोग करते हैं संग्रह की सामग्री को वापस करने की विधि।
इस मामले में, परिणामों में प्रत्येक फ़ील्ड के नाम लौटाए जाते हैं।
लेकिन क्या होगा अगर हम चाहते हैं कि क्षेत्र के नाम अलग हों? उदाहरण के लिए, क्या होगा यदि हम name
. को बदलना चाहते हैं employee
. के साथ ?
उस स्थिति में हम aggregate()
. का उपयोग कर सकते हैं इस तरह की क्वेरी करने की विधि:
db.employees.aggregate([
{ "$project": { "employee": "$name", "salary": 1 }}
])
परिणाम:
{ "_id" : 2, "salary" : 128000, "employee" : "Sarah" } { "_id" : 3, "salary" : 25000, "employee" : "Fritz" } { "_id" : 4, "salary" : 45000, "employee" : "Chris" } { "_id" : 5, "salary" : 82000, "employee" : "Beck" }
ध्यान दें कि MongoDB फ़ील्ड को प्रविष्टि के क्रम में प्रदर्शित करता है, जिसके परिणामस्वरूप salary
employee
. के समक्ष प्रस्तुत किया जा रहा क्षेत्र खेत। अगर यह अस्वीकार्य है, तो हम इस क्वेरी को हमेशा इसमें बदल सकते हैं:
db.employees.aggregate([
{ "$project": { "employee": "$name", "salary": "$salary" }}
])
परिणाम:
{ "_id" : 2, "employee" : "Sarah", "salary" : 128000 } { "_id" : 3, "employee" : "Fritz", "salary" : 25000 } { "_id" : 4, "employee" : "Chris", "salary" : 45000 } { "_id" : 5, "employee" : "Beck", "salary" : 82000 }
एम्बेडेड दस्तावेज़ों में फ़ील्ड का नाम बदलें
आप एम्बेडेड दस्तावेज़ों में फ़ील्ड का नाम बदलने के लिए उसी विधि का उपयोग कर सकते हैं। इस मामले में, आप जिस फ़ील्ड का नाम बदलना चाहते हैं, उसे संदर्भित करने के लिए डॉट-नोटेशन का उपयोग करें।
मान लीजिए कि हम एक pets
. के विरुद्ध निम्न क्वेरी चलाते हैं संग्रह:
db.pets.find().pretty()
परिणाम:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20, "awards" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" } } } { "_id" : 2, "name" : "Fetch", "details" : { "born" : ISODate("2020-06-22T14:00:00Z"), "color" : "Black" } } { "_id" : 3, "name" : "Scratch", "details" : { "eats" : [ "Mouse Porridge", "Bird Soup", "Caviar" ], "type" : "Cat", "born" : ISODate("2020-12-19T14:00:00Z") } }
हम इस तरह एम्बेडेड दस्तावेज़ों पर फ़ील्ड का नाम बदल सकते हैं:
db.pets.aggregate([
{ "$project":
{
"_id": 0,
"Pet": "$name",
"Type": "$details.type",
"Born": "$details.born"
}
}
])
परिणाम:
{ "Pet" : "Wag", "Type" : "Dog" } { "Pet" : "Fetch", "Born" : ISODate("2020-06-22T14:00:00Z") } { "Pet" : "Scratch", "Type" : "Cat", "Born" : ISODate("2020-12-19T14:00:00Z") }
इस मामले में मैंने एम्बेड किए गए दस्तावेज़ों में सभी फ़ील्ड का चयन नहीं किया है, लेकिन आपको विचार मिल गया है।
मैंने "_id": 0
. का भी उपयोग किया है _id
. को छोड़ने के लिए फ़ील्ड.
यह भी ध्यान दें कि यदि किसी दस्तावेज़ में वास्तव में $project
. में निर्दिष्ट फ़ील्ड नहीं है चरण, तो इसे परिणामी दस्तावेज़ में आसानी से छोड़ दिया जाएगा। आप इसे पहले दस्तावेज़ में देख सकते हैं, जो Born
. को छोड़ देता है फ़ील्ड, और दूसरा दस्तावेज़, जो Type
. को छोड़ देता है फ़ील्ड.