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 . का मूल्यांकन करता है ।