जब आप find()
. जैसी विधियों का उपयोग करते हैं या findOne()
MongoDB में, डिफ़ॉल्ट रूप से आपको पूरा दस्तावेज़ वापस मिल जाता है। और यदि आप अनुमानों का उपयोग करते हैं, तो आप विशिष्ट कुंजी/मूल्य जोड़े वापस कर सकते हैं।
लेकिन क्या होगा यदि आप केवल मूल्य चाहते हैं?
findOne()
का उपयोग करते समय आप अपनी क्वेरी में उस फ़ील्ड का नाम जोड़कर किसी फ़ील्ड का मान निकाल सकते हैं ।
उदाहरण
मान लीजिए हमारे पास products
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
अगर हम पहले दस्तावेज़ के उत्पाद को वापस करना चाहते हैं, तो हम निम्न कार्य कर सकते हैं:
db.products.findOne().product
परिणाम:
Bat
ध्यान दें कि हमने findOne()
. का इस्तेमाल किया है तरीका। यह तकनीक find()
. पर काम नहीं करती है तरीका। findOne()
विधि एकल दस्तावेज़ लौटाती है, जबकि find()
विधि केवल दस्तावेज़ पर एक कर्सर लौटाती है।
अगर हम ऐरे को वापस करना चाहते हैं तो हम ऐसा कर सकते हैं:
db.products.findOne().sizes
परिणाम:
[ "S", "M", "L" ]
और हम इसकी अनुक्रमणिका को संदर्भित करके एक सरणी मान प्राप्त कर सकते हैं:
db.products.findOne().sizes[0]
परिणाम:
S
सरणी शून्य-आधारित हैं, और इसलिए 0
सरणी में पहले तत्व का संदर्भ देता है, 1
दूसरे तत्व का संदर्भ देता है, 2
तीसरा, और इसी तरह।
विशिष्ट दस्तावेज़
डिफ़ॉल्ट रूप से, findOne()
विधि संग्रह में पहला दस्तावेज़ लौटाती है। हम पहले तर्क के रूप में एक क्वेरी पास करने को निर्दिष्ट करके एक अलग दस्तावेज़ का चयन कर सकते हैं।
मैं कहता हूं "पहला तर्क" क्योंकि findOne()
एक projection
भी स्वीकार करता है वैकल्पिक दूसरे तर्क के रूप में तर्क।
db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes
परिणाम:
[ "S", "L", "XL" ]
इस मामले में मैंने एक प्रक्षेपण तर्क जोड़ा, लेकिन इसका परिणाम पर कोई प्रभाव नहीं पड़ा। लेकिन अगर मैं 0 का मान निर्दिष्ट करता तो इसका प्रभाव होता। इसके परिणामस्वरूप कुछ भी वापस नहीं होता।
एम्बेडेड दस्तावेज़
एम्बेड किए गए दस्तावेज़ों से मान वापस करने के लिए आप डॉट नोटेशन का उपयोग कर सकते हैं
उदाहरण दस्तावेज़:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20 } }
हम एम्बेडेड दस्तावेज़ से एक मान वापस करने के लिए निम्न कार्य कर सकते हैं:
db.pets.findOne().details.type
परिणाम:
Dog