MongoDB में, $min
एग्रीगेशन पाइपलाइन ऑपरेटर एक एक्सप्रेशन से न्यूनतम मान लौटाता है।
सिंटैक्स
$min
ऑपरेटर दो सिंटैक्स का समर्थन करता है।
सिंटैक्स 1:
{ $min: <expression> }
सिंटैक्स 2:
{ $min: [ <expression1>, <expression2> ... ] }
पहला सिंटैक्स एक तर्क को स्वीकार करता है और दूसरा सिंटैक्स कई तर्कों को स्वीकार करता है।
जब $group
. में उपयोग किया जाता है चरण, आप केवल पहले सिंटैक्स का उपयोग कर सकते हैं। इस मामले में, $min
वह न्यूनतम मान लौटाता है, जो कुंजी द्वारा समान समूह को साझा करने वाले दस्तावेज़ों के समूह में प्रत्येक दस्तावेज़ में व्यंजक लागू करने के परिणामस्वरूप होता है।
सिंटैक्स 1 के उदाहरण (एकल तर्क)
यहां कुछ उदाहरण दिए गए हैं जो एकल तर्क सिंटैक्स का उपयोग करते हैं।
समूहीकृत दस्तावेज़
यह उदाहरण $min
. का उपयोग करता है $group
. के संयोजन के साथ कुंजी द्वारा समूहीकृत दस्तावेज़ों के समूह से न्यूनतम मान वापस करने के लिए।
मान लीजिए हमारे पास 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" : "Kangaroo", "weight" : 100 } { "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 } { "_id" : 7, "name" : "Punch", "type" : "Kangaroo", "weight" : 200 } { "_id" : 8, "name" : "Snap", "type" : "Cat", "weight" : 12 } { "_id" : 9, "name" : "Ruff", "type" : "Dog", "weight" : 30 }
हम इन दस्तावेज़ों को उनके type
. के आधार पर समूहित कर सकते हैं फ़ील्ड, और फिर $min
. का उपयोग करें weight
. का न्यूनतम मान लौटाने के लिए प्रत्येक समूह के लिए फ़ील्ड:
db.pets.aggregate(
[
{
$group:
{
_id: "$type",
min: { $min: "$weight" }
}
}
]
)
परिणाम:
{ "_id" : "Kangaroo", "min" : 100 } { "_id" : "Dog", "min" : 10 } { "_id" : "Cat", "min" : 7 }
सरणी
यह उदाहरण $min
. पर लागू होता है एक एकल दस्तावेज़ के लिए जिसमें मानों की एक सरणी वाला फ़ील्ड होता है।
यह विकल्प केवल एकल तर्क सिंटैक्स का उपयोग करते समय उपलब्ध होता है। बहु-तर्क सिंटैक्स का उपयोग करते समय सरणियों को अनदेखा कर दिया जाता है (इस पर और अधिक नीचे)।
मान लीजिए हमारे पास players
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "player" : "Homer", "scores" : [ 1, 7, 2, 3, 8, 7, 1 ] } { "_id" : 2, "player" : "Marge", "scores" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "player" : "Bart", "scores" : [ 15, 11, 8, 0, 1, 3 ] } { "_id" : 4, "player" : "Brian", "scores" : [ 7 ] } { "_id" : 5, "player" : "Farnsworth", "scores" : [ ] } { "_id" : 6, "player" : "Meg", "scores" : null } { "_id" : 7, "player" : "Ron" }
हम $min
. लागू कर सकते हैं scores
. तक प्रत्येक दस्तावेज़ में फ़ील्ड:
db.players.aggregate(
[
{
$project:
{
player: 1,
min: { $min: "$scores" }
}
}
]
)
परिणाम:
{ "_id" : 1, "player" : "Homer", "min" : 1 } { "_id" : 2, "player" : "Marge", "min" : 0 } { "_id" : 3, "player" : "Bart", "min" : 0 } { "_id" : 4, "player" : "Brian", "min" : 7 } { "_id" : 5, "player" : "Farnsworth", "min" : null } { "_id" : 6, "player" : "Meg", "min" : null } { "_id" : 7, "player" : "Ron", "min" : null }
इस मामले में, पहले चार दस्तावेज़ों ने उनके संबंधित सरणियों में मौजूद विभिन्न संख्याओं से न्यूनतम मान लौटाया।
दस्तावेज़ 4 के मामले में, यह संख्या के समान ही था, क्योंकि सरणी में केवल एक ही संख्या थी।
दस्तावेज़ 5 लौटा null
क्योंकि हमने एक खाली सरणी प्रदान की है।
दस्तावेज़ 6 लौटा null
क्योंकि हमने null
प्रदान किया है तर्क के रूप में।
दस्तावेज़ 7 लौटा null
क्योंकि फ़ील्ड मौजूद ही नहीं था।
सिंटैक्स 2 का उदाहरण (एकाधिक तर्क)
दूसरे सिंटैक्स में $min
. प्रदान करना शामिल है एक से अधिक तर्क के साथ। $min
फिर सभी दिए गए तर्कों से न्यूनतम मान लौटाता है।
मान लीजिए हमारे पास data
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : 1, "a" : 10, "b" : 500, "c" : -900, "d" : 4 }
हम $min
. का उपयोग कर सकते हैं a
. से न्यूनतम मान वापस करने के लिए , b
, c
, और d
फ़ील्ड:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
min: { $min: [ "$a", "$b", "$c", "$d" ] }
}
}
]
)
परिणाम:
{ "_id" : 1, "min" : -900 }
इस मामले में, -900
न्यूनतम मूल्य था।
अनुपलब्ध फ़ील्ड
बहु-तर्क सिंटैक्स का उपयोग करते समय, $min
किसी भी लापता फ़ील्ड को अनदेखा करता है। यही है, यदि आप किसी ऐसे क्षेत्र की आपूर्ति करते हैं जो मौजूद नहीं है, तो वह इसे अनदेखा कर देता है। यदि कोई भी फ़ील्ड मौजूद नहीं है, तो यह null
लौटाता है ।
उदाहरण:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
min: { $min: [ "$a", "$b", "$c", "$d", "$e" ] }
}
}
]
)
परिणाम:
{ "_id" : 1, "min" : -900 }
इस मामले में मैंने एक अतिरिक्त क्षेत्र प्रदान किया ($e
) जो दस्तावेज़ में मौजूद नहीं है। $min
शेष फ़ील्ड के आधार पर न्यूनतम मान की गणना की जो करते हैं मौजूद है।
हालांकि, यहां क्या होता है जब कोई नहीं फ़ील्ड मौजूद हैं:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
result: { $min: [ "$x", "$y", "$z" ] }
}
}
]
)
परिणाम:
{ "_id" : 1, "result" : null }
परिणाम null
है .
जैसा कि हमने पहले देखा, एकल-तर्क सिंटैक्स का उपयोग करते समय, एक अनुपलब्ध फ़ील्ड का परिणाम null
होता है ।
उदाहरण:
db.pets.aggregate(
[
{
$group:
{
_id: "$type",
min: { $min: "$oops!" }
}
}
]
)
परिणाम:
{ "_id" : "Dog", "min" : null } { "_id" : "Cat", "min" : null } { "_id" : "Kangaroo", "min" : null }
विभिन्न प्रकारों की तुलना करना
$min
ऑपरेटर मूल्य और प्रकार दोनों की तुलना करता है। जब मान अलग-अलग प्रकार के हों, $min
बीएसओएन तुलना आदेश के आधार पर न्यूनतम मूल्य की गणना करता है।
मान लीजिए हमारे संग्रह में निम्नलिखित दस्तावेज हैं:
{ "_id" : 2, "a" : 1, "b" : 2, "c" : 3, "d" : [ 0 ] } { "_id" : 3, "a" : 1, "b" : 2, "c" : 3, "d" : "0" } { "_id" : 4, "a" : "One", "b" : "Two", "c" : "Three", "d" : "Four" } { "_id" : 5, "a" : ISODate("1999-01-03T23:30:15.100Z"), "b" : ISODate("2000-01-03T23:30:15.100Z") } { "_id" : 6, "a" : ISODate("1999-01-03T23:30:15.100Z"), "b" : "2000-01-03T23:30:15.100Z" }
दस्तावेज़ 4 के अपवाद के साथ, उनमें से प्रत्येक दस्तावेज़ मिश्रित प्रकार का उपयोग करता है (डेटा फ़ील्ड में कम से कम एक प्रकार अन्य से भिन्न होता है)। दस्तावेज़ 4 चारों क्षेत्रों में स्ट्रिंग्स का उपयोग करता है।
यहां बताया गया है कि जब हम $min
लागू करते हैं तो क्या होता है उन दस्तावेज़ों के लिए:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 2, 3, 4, 5, 6 ] } } },
{
$project:
{
min: { $min: [ "$a", "$b", "$c", "$d" ] }
}
}
]
)
परिणाम:
{ "_id" : 2, "min" : 1 } { "_id" : 3, "min" : 1 } { "_id" : 4, "min" : "Four" } { "_id" : 5, "min" : ISODate("1999-01-03T23:30:15.100Z") } { "_id" : 6, "min" : "2000-01-03T23:30:15.100Z" }
_id
वाले दस्तावेज़ के संबंध में का 2
, संख्याएं सरणियों से कम होती हैं, इसलिए संख्या 1
लौटा दिया जाता है (भले ही सरणी में एक संख्या होती है जो अन्य सभी संख्याओं से कम होती है)।
दस्तावेज़ 3:संख्याएँ स्ट्रिंग्स से कम होती हैं, और इसलिए सबसे कम संख्या लौटा दी जाती है।
दस्तावेज़ 4:सभी फ़ील्ड स्ट्रिंग हैं, और इसलिए Four
न्यूनतम स्ट्रिंग है।
दस्तावेज़ 5:दो तिथियों की आपूर्ति की जाती है, और इसलिए पहले की तारीख वापस कर दी जाती है।
दस्तावेज़ 6:इस मामले में, दिनांक वस्तु और दिनांक स्ट्रिंग की आपूर्ति की जाती है। स्ट्रिंग्स दिनांक ऑब्जेक्ट से कम हैं, और इसलिए स्ट्रिंग वापस कर दी जाती है (भले ही इसकी तिथि दिनांक ऑब्जेक्ट की तुलना में बाद में हो)।
उपलब्ध चरण
$min
निम्नलिखित चरणों में उपलब्ध है:
$group
$project
$addFields
$set
$replaceRoot
$replaceWith
$match
चरण जिसमें एक$expr
. शामिल है अभिव्यक्ति