MongoDB में, distinct
एग्रीगेशन कमांड एकल संग्रह में निर्दिष्ट फ़ील्ड के लिए अलग-अलग मान ढूंढता है।
यह एक दस्तावेज़ देता है जिसमें विशिष्ट मानों की एक सरणी होती है, साथ ही क्वेरी आंकड़ों और क्वेरी योजना के साथ एक एम्बेडेड दस्तावेज़ होता है।
अलग-अलग मान वे होते हैं जिनमें अनावश्यक डुप्लीकेट हटा दिए जाते हैं। विशिष्ट मूल्य अद्वितीय मूल्य हैं। उदाहरण के लिए, यदि आपके पास समान मान वाले 2 या 3 दस्तावेज़ हैं, तो distinct
कमांड केवल एक मान लौटाएगा।
एक db.collection.distinct()
भी है विधि, जो distinct
. के लिए एक शेल आवरण विधि है आदेश।
उदाहरण
मान लीजिए हमारे पास pets
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ।
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
हम distinct
. का उपयोग कर सकते हैं विशिष्ट पालतू प्रकारों को वापस करने का आदेश।
distinct
कमांड संग्रह को पहले क्षेत्र के रूप में और कुंजी को दूसरे के रूप में स्वीकार करता है। कुंजी वह क्षेत्र है जिसके लिए अलग-अलग मान वापस करना है।
db.runCommand ( { distinct: "pets", key: "type" } )
परिणाम:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
इस उदाहरण में, भले ही संग्रह में चार कुत्ते और दो बिल्लियाँ हैं, फिर भी सरणी में प्रत्येक में से केवल एक है। distinct
कमांड ने डुप्लिकेट मानों को हटा दिया।
मूल दस्तावेज़ में केवल एक बल्ला होता है और इसलिए distinct
कमांड इसे नहीं बदलता है - डिडुप करने के लिए कोई डुप्लिकेट मान नहीं थे।
एम्बेडेड दस्तावेज़
एम्बेडेड फ़ील्ड से अलग मान प्राप्त करने के लिए आप डॉट नोटेशन का उपयोग कर सकते हैं
मान लीजिए हमारे पास products
. नामक संग्रह है जिसमें निम्नलिखित दस्तावेज शामिल हैं:
{ "_id" : 1, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : { "name" : "Shirt", "color" : "Green" }, "sizes" : [ "S", "M", "XL" ] } { "_id" : 3, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 4, "product" : { "name" : "Shorts", "color" : "Green" }, "sizes" : [ "M", "XS" ] } { "_id" : 5, "product" : { "name" : "Shorts", "color" : "Brown" }, "sizes" : [ "S", "M" ] } { "_id" : 6, "product" : { "name" : "Cap", "color" : "Purple" }, "sizes" : [ "M" ] } { "_id" : 7, "product" : { "name" : "Shoes", "color" : "Brown" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 8, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "M", "L", "XL" ] } { "_id" : 9, "product" : { "name" : "Cap", "color" : "Green" }, "sizes" : [ "M", "L" ] }
उत्पाद नामों के लिए अलग-अलग मान वापस करने के लिए हम निम्नलिखित क्वेरी का उपयोग कर सकते हैं।
db.runCommand ( { distinct: "products", key: "product.name" } )
परिणाम:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
हम color
. के लिए भी यही काम कर सकते हैं फ़ील्ड.
db.runCommand ( { distinct: "products", key: "product.color" } )
परिणाम:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
एक सरणी से अलग मान प्राप्त करें
यहां distinct
का उपयोग करने का तरीका बताया गया है उपरोक्त सरणी से अलग मान प्राप्त करने के लिए आदेश।
db.runCommand ( { distinct: "products", key: "sizes" } )
परिणाम:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
distinct
का उपयोग करें एक प्रश्न के साथ
आप उन दस्तावेज़ों को निर्दिष्ट करने के लिए एक क्वेरी प्रदान कर सकते हैं जिनसे अलग-अलग मान प्राप्त करना है। ऐसा करने के लिए, कुंजी के बाद क्वेरी जोड़ें।
उदाहरण:
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
परिणाम:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
अधिक जानकारी
distinct
कमांड अन्य क्षेत्रों को भी स्वीकार करता है, जैसे comment
, readConcern
, और collation
(जो आपको स्ट्रिंग तुलना के लिए भाषा-विशिष्ट नियम निर्दिष्ट करने की अनुमति देता है, जैसे अक्षर केस और उच्चारण चिह्न के नियम)।
अधिक जानकारी के लिए MongoDB दस्तावेज़ देखें।