MongoDB में, $anyElementTrue
एकत्रीकरण पाइपलाइन ऑपरेटर एक सेट के रूप में एक सरणी का मूल्यांकन करता है और true
returns देता है यदि कोई भी तत्व true
है ।
यदि कोई भी तत्व true
नहीं है , तो यह false
. लौटाता है ।
एक सरणी का तत्व true
है अगर यह false
नहीं है , null
, 0
, या undefined
।
उदाहरण
मान लीजिए कि हमारे पास निम्नलिखित दस्तावेज़ के साथ एक संग्रह है:
{ "_id" : 1, "data" : [ 1, 2, 3 ] }
इस दस्तावेज़ में एक सरणी है।
हम निम्न क्वेरी को $anyElementTrue
. के साथ चला सकते हैं यह पता लगाने के लिए कि सरणी में कोई तत्व है या नहीं जो true
. का मूल्यांकन करता है :
db.test.aggregate(
[
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "anyElementTrue" : true }
इस मामले में, सभी सरणी तत्व true
. का मूल्यांकन करते हैं (यानी वे false
नहीं हैं , null
, 0
, या undefined
), और इसलिए हमें true
. का परिणाम मिलता है ।
जब कोई तत्व सत्य नहीं है
आइए संग्रह में निम्नलिखित दस्तावेज़ जोड़ें:
{ "_id" : 2, "data" : [ false, undefined, 0, null ] }
और चलिये $anyElementTrue
उस दस्तावेज़ के विरुद्ध:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "anyElementTrue" : false }
जैसा कि हम यहां देख सकते हैं, $anyElementTrue
false
का मूल्यांकन करता है जब भी किसी सरणी में false
होता है , null
, 0
, या undefined
मान।
जब सरणी में सही और गलत दोनों शामिल हों
आइए संग्रह में निम्नलिखित दस्तावेज़ जोड़ें:
{ "_id" : 3, "data" : [ true, false ] }
और चलिये $anyElementTrue
उस दस्तावेज़ के विरुद्ध:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "anyElementTrue" : true }
हमें true
मिलता है , भले ही एक और तत्व है जो false
. है . यह अपेक्षित है, क्योंकि $anyElementTrue
true
लौटाता है जब भी कम से कम एक ऐसा तत्व हो जो true
. हो , भले ही कितने अन्य तत्व झूठे हों।
खाली सरणी
खाली सरणियाँ true
लौटाती हैं ।
मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:
{ "_id" : 4, "data" : [ ] }
इस दस्तावेज़ में एक खाली सरणी है।
अब चलिए $anyElementTrue
चलाते हैं फिर से:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "anyElementTrue" : false }
यह false
लौटाता है , क्योंकि एक खाली सरणी false
नहीं है ।
नेस्टेड सरणी
$anyElementTrue
ऑपरेटर नहीं करता है किसी भी नेस्टेड सरणी में उतरें। यह शीर्ष-स्तर पर सरणी का मूल्यांकन करता है।
इसलिए, क्या नेस्टेड सरणी में ऐसे तत्व हैं जो true
हैं या false
$anyElementTrue
. के लिए अप्रासंगिक है . जहां तक $anyElementTrue
. की बात है संबंधित है, नेस्टेड सरणी तत्व है, और इसलिए true
।
मेरा क्या मतलब है यह प्रदर्शित करने के लिए, मान लीजिए कि हम निम्नलिखित दस्तावेज़ सम्मिलित करते हैं:
{ "_id" : 5, "data" : [ false, [ false ] ] } { "_id" : 6, "data" : [ false, false ] }
अब चलिए $anyElementTrue
चलाते हैं उन दो दस्तावेज़ों के विरुद्ध:
db.test.aggregate(
[
{ $match: {_id: { $in: [5,6] }} },
{ $project: {
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "_id" : 5, "anyElementTrue" : true } { "_id" : 6, "anyElementTrue" : false }
हम देख सकते हैं कि पहला दस्तावेज़ true
लौटाया गया है और दूसरा लौटा false
।
ऐसा इसलिए है, क्योंकि पहले दस्तावेज़ में सरणी में एक नेस्टेड सरणी है, जो true
को वापस करने के लिए पर्याप्त है। , इसकी सामग्री की परवाह किए बिना।
दूसरे दस्तावेज़ में नेस्टेड सरणी नहीं है - इसमें केवल दो false
शामिल हैं मान - और इसलिए यह false
. का मूल्यांकन करता है ।