एक प्रोजेक्शन क्वेरी एक क्वेरी है जहां आप निर्दिष्ट करते हैं कि कौन से फ़ील्ड लौटाए जाने चाहिए।
MongoDB में, जब आप db.collection.find()
. का उपयोग करके किसी संग्रह को क्वेरी करते हैं विधि, आप निर्दिष्ट कर सकते हैं कि आप किन क्षेत्रों को वापस करना चाहते हैं।
आप अपनी क्वेरी में फ़ील्ड नामों को शामिल करके और 1
. जोड़कर ऐसा कर सकते हैं या 0
उनके बगल में, यह निर्दिष्ट करने के लिए कि इसे वापस किया जाना चाहिए या नहीं। यह एक प्रक्षेपण है पैरामीटर। 1
. का प्रोजेक्शन पैरामीटर फ़ील्ड और एक 0
. प्रदर्शित करेगा इसे छिपा देगा।
उदाहरण
सबसे पहले एक प्रश्न करते हैं बिना प्रोजेक्शन (ताकि हम देख सकें कि कितने फ़ील्ड लौटाए गए हैं):
बिना प्रोजेक्शन के
db.musicians.find( { instrument: "Vocals"} )
परिणाम:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
प्रोजेक्शन के साथ
अब, केवल नाम . प्रदर्शित करने के लिए प्रोजेक्शन का उपयोग करें फ़ील्ड:
db.musicians.find( { instrument: "Vocals" }, { name: 1 } )
परिणाम:
{ "_id" : 1, "name" : "Ian Gillan" } { "_id" : 6, "name" : "Jeff Martin" }
आप देखेंगे कि _id
फ़ील्ड स्वचालित रूप से शामिल है, भले ही आप इसे निर्दिष्ट न करें। आप 0
. का उपयोग करके इस फ़ील्ड को बाहर कर सकते हैं इसके खिलाफ:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )
परिणाम:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin" }
समावेशी और बहिष्करण का मिश्रण
आप 1
को मिक्स नहीं कर सकते एस और 0
s (_id
. के अपवाद के साथ) खेत)। यदि आप समावेशन और बहिष्करण को इस तरह मिलाने का प्रयास करते हैं:
db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )
आप इस त्रुटि के साथ समाप्त होंगे:
Error: error: { "waitedMS" : NumberLong(0), "ok" : 0, "errmsg" : "Projection cannot have a mix of inclusion and exclusion.", "code" : 2 }
तो आपके लिए या तो फ़ील्ड शामिल करें या उन्हें बाहर करें — दोनों नहीं।
यहां बहिष्करण द्वारा फ़ील्ड निर्दिष्ट करने का एक उदाहरण दिया गया है:
db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )
परिणाम:
{ "name" : "Ian Gillan" } { "name" : "Jeff Martin", "born" : 1969 }